Skip to content

Commit e359241

Browse files
committed
Fixed SVGRenderer's Sprites.
1 parent 574f8d7 commit e359241

2 files changed

Lines changed: 42 additions & 18 deletions

File tree

examples/js/renderers/SVGRenderer.js

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ THREE.SVGRenderer = function () {
2626
_w, // z-buffer to w-buffer
2727
_vector3 = new THREE.Vector3(), // Needed for PointLight
2828

29-
_svgPathPool = [], _svgRectPool = [], _svgLinePool = [],
30-
_svgNode, _pathCount, _circleCount, _lineCount,
29+
_svgPathPool = [], _svgLinePool = [], _svgRectPool = [],
30+
_svgNode, _pathCount = 0, _lineCount = 0, _rectCount = 0,
3131
_quality = 1;
3232

3333
this.domElement = _svg;
@@ -86,8 +86,8 @@ THREE.SVGRenderer = function () {
8686
this.clear = function () {
8787

8888
_pathCount = 0;
89-
_circleCount = 0;
9089
_lineCount = 0;
90+
_rectCount = 0;
9191

9292
while ( _svg.childNodes.length > 0 ) {
9393

@@ -129,7 +129,7 @@ THREE.SVGRenderer = function () {
129129
if ( element instanceof THREE.RenderableSprite ) {
130130

131131
_v1 = element;
132-
_v1.x *= _svgWidthHalf; _v1.y *= -_svgHeightHalf;
132+
_v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
133133

134134
renderSprite( _v1, element, material );
135135

@@ -260,19 +260,15 @@ THREE.SVGRenderer = function () {
260260

261261
function renderSprite( v1, element, material ) {
262262

263-
var scaleX = element.object.scale.x;
264-
var scaleY = element.object.scale.y;
263+
var scaleX = element.scale.x * _svgWidthHalf;
264+
var scaleY = element.scale.y * _svgHeightHalf;
265265

266-
// TODO: Be able to disable this
266+
_svgNode = getRectNode( _rectCount ++ );
267267

268-
scaleX *= element.scale.x * _svgWidthHalf;
269-
scaleY *= element.scale.y * _svgHeightHalf;
270-
271-
_svgNode = getRectNode( _circleCount++ );
272-
_svgNode.setAttribute( 'x', v1.x - scaleX );
273-
_svgNode.setAttribute( 'y', v1.y - scaleY );
274-
_svgNode.setAttribute( 'width', 2 * scaleX );
275-
_svgNode.setAttribute( 'height', 2 * scaleY );
268+
_svgNode.setAttribute( 'x', v1.x - ( scaleX * 0.5 ) );
269+
_svgNode.setAttribute( 'y', v1.y - ( scaleY * 0.5 ) );
270+
_svgNode.setAttribute( 'width', scaleX );
271+
_svgNode.setAttribute( 'height', scaleY );
276272

277273
if ( material instanceof THREE.SpriteMaterial ) {
278274

@@ -284,7 +280,7 @@ THREE.SVGRenderer = function () {
284280

285281
}
286282

287-
function renderLine ( v1, v2, element, material ) {
283+
function renderLine( v1, v2, element, material ) {
288284

289285
_svgNode = getLineNode( _lineCount ++ );
290286

@@ -412,7 +408,7 @@ THREE.SVGRenderer = function () {
412408

413409
if ( _quality == 0 ) {
414410

415-
_svgRectPool[id].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
411+
_svgRectPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
416412

417413
}
418414

examples/misc_ubiquity_test.html

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,34 @@
148148
group.scale.set( 2, 2, 2 );
149149
scene.add( group );
150150

151+
// SPRITES
152+
153+
var texture = THREE.ImageUtils.loadTexture( 'textures/sprite.png' );
154+
var material = new THREE.SpriteMaterial( { map: texture } );
155+
156+
for ( var i = 0; i < 50; i ++ ) {
157+
158+
var sprite = new THREE.Sprite( material );
159+
sprite.position.x = Math.random() * 1000 - 500;
160+
sprite.position.y = Math.random() * 1000 - 500;
161+
sprite.position.z = Math.random() * 1000 - 500;
162+
sprite.scale.set( 64, 64, 1 );
163+
scene.add( sprite );
164+
165+
}
166+
167+
for ( var i = 0; i < 50; i ++ ) {
168+
169+
var material = new THREE.SpriteMaterial( { color: Math.random() * 0xffffff } );
170+
var sprite = new THREE.Sprite( material );
171+
sprite.position.x = Math.random() * 1000 - 500;
172+
sprite.position.y = Math.random() * 1000 - 500;
173+
sprite.position.z = Math.random() * 1000 - 500;
174+
sprite.scale.set( 64, 64, 1 );
175+
scene.add( sprite );
176+
177+
}
178+
151179
// LIGHTS
152180

153181
var ambient = new THREE.AmbientLight( 0x80ffff );
@@ -209,7 +237,7 @@
209237

210238
}
211239

212-
function onDocumentMouseMove(event) {
240+
function onDocumentMouseMove( event ) {
213241

214242
mouseX = ( event.clientX - windowHalfX );
215243
mouseY = ( event.clientY - windowHalfY );

0 commit comments

Comments
 (0)