Explorar o código

Merge pull request #11299 from linev/points

Better support of THREE.Points in Canvas and SVG renderer
Mr.doob %!s(int64=8) %!d(string=hai) anos
pai
achega
596707b634
Modificáronse 2 ficheiros con 25 adicións e 1 borrados
  1. 19 0
      examples/js/renderers/Projector.js
  2. 6 1
      examples/js/renderers/SVGRenderer.js

+ 19 - 0
examples/js/renderers/Projector.js

@@ -776,6 +776,25 @@ THREE.Projector = function () {
 
 					}
 
+				} else if ( geometry instanceof THREE.BufferGeometry ) {
+
+					var attributes = geometry.attributes;
+
+					if ( attributes.position !== undefined ) {
+
+						var positions = attributes.position.array;
+
+						for ( var i = 0, l = positions.length; i < l; i += 3 ) {
+
+							_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );
+							_vector4.applyMatrix4( _modelViewProjectionMatrix );
+
+							pushPoint( _vector4, object, camera );
+
+						}
+
+					}
+
 				}
 
 			} else if ( object instanceof THREE.Sprite ) {

+ 6 - 1
examples/js/renderers/SVGRenderer.js

@@ -326,6 +326,11 @@ THREE.SVGRenderer = function () {
 		var scaleX = element.scale.x * _svgWidthHalf;
 		var scaleY = element.scale.y * _svgHeightHalf;
 
+		if ( material.isPointsMaterial ) {
+			scaleX *= material.size;
+			scaleY *= material.size;
+		}
+
 		_svgNode = getRectNode( _rectCount ++ );
 
 		_svgNode.setAttribute( 'x', v1.x - ( scaleX * 0.5 ) );
@@ -333,7 +338,7 @@ THREE.SVGRenderer = function () {
 		_svgNode.setAttribute( 'width', scaleX );
 		_svgNode.setAttribute( 'height', scaleY );
 
-		if ( material instanceof THREE.SpriteMaterial ) {
+		if ( material.isSpriteMaterial || material.isPointsMaterial ) {
 
 			_svgNode.setAttribute( 'style', 'fill: ' + material.color.getStyle() );