提交 ed5dc837 编写于 作者: M Mr.doob

More work on unifying CanvasRenderer Sprites with WebGLRenderer Sprites.

Not entirely correct yet.
上级 de366ceb
......@@ -55,11 +55,13 @@
for ( var iy = 0; iy < AMOUNTY; iy++ ) {
particle = new THREE.Sprite( material );
particle.scale.y = 4;
particle.scale.y = 20;
particle.position.x = ix * SEPARATION - ( ( AMOUNTX * SEPARATION ) / 2 );
particle.position.z = iy * SEPARATION - ( ( AMOUNTY * SEPARATION ) / 2 );
scene.add( particle );
}
}
renderer = new THREE.CanvasRenderer();
......
......@@ -116,10 +116,8 @@
var particle = this instanceof THREE.Sprite ? this : particle;
var delay = delay !== undefined ? delay : 0;
particle.position.x = 0;
particle.position.y = 0;
particle.position.z = 0;
particle.scale.x = particle.scale.y = Math.random() * 3 + 1;
particle.position.set( 0, 0, 0 )
particle.scale.x = particle.scale.y = Math.random() * 32 + 16;
new TWEEN.Tween( particle )
.delay( delay )
......
......@@ -450,108 +450,56 @@ THREE.CanvasRenderer = function ( parameters ) {
setOpacity( material.opacity );
setBlending( material.blending );
var width, height, scaleX, scaleY,
bitmap, bitmapWidth, bitmapHeight;
var scaleX = element.scale.x * _canvasWidthHalf;
var scaleY = element.scale.y * _canvasHeightHalf;
if ( material instanceof THREE.SpriteMaterial ||
material instanceof THREE.ParticleSystemMaterial ) { // Backwards compatibility
if ( material.map.image !== undefined ) {
bitmap = material.map.image;
bitmapWidth = bitmap.width >> 1;
bitmapHeight = bitmap.height >> 1;
_elemBox.min.set( v1.x - scaleX, v1.y - scaleY );
_elemBox.max.set( v1.x + scaleX, v1.y + scaleY );
scaleX = element.scale.x * _canvasWidthHalf;
scaleY = element.scale.y * _canvasHeightHalf;
if ( _clipBox.isIntersectionBox( _elemBox ) === false ) {
width = scaleX * bitmapWidth;
height = scaleY * bitmapHeight;
// TODO: Rotations break this...
_elemBox.makeEmpty();
return;
_elemBox.min.set( v1.x - width, v1.y - height );
_elemBox.max.set( v1.x + width, v1.y + height );
}
if ( _clipBox.isIntersectionBox( _elemBox ) === false ) {
if ( material instanceof THREE.SpriteMaterial ||
material instanceof THREE.ParticleSystemMaterial ) { // Backwards compatibility
_elemBox.makeEmpty();
return;
if ( material.map.image !== undefined ) {
}
var bitmap = material.map.image;
_context.save();
_context.translate( v1.x, v1.y );
_context.rotate( - element.rotation );
_context.rotate( - material.rotation );
_context.scale( scaleX, - scaleY );
_context.translate( - bitmapWidth, - bitmapHeight );
_context.drawImage( bitmap, 0, 0 );
_context.drawImage( bitmap, 0, 0, bitmap.width, bitmap.height, - 0.5, - 0.5, 1, 1 );
_context.restore();
} else {
scaleX = element.object.scale.x;
scaleY = element.object.scale.y;
// TODO: Be able to disable this
scaleX *= element.scale.x * _canvasWidthHalf;
scaleY *= element.scale.y * _canvasHeightHalf;
_elemBox.min.set( v1.x - scaleX, v1.y - scaleY );
_elemBox.max.set( v1.x + scaleX, v1.y + scaleY );
if ( _clipBox.isIntersectionBox( _elemBox ) === false ) {
_elemBox.makeEmpty();
return;
}
setFillStyle( material.color.getStyle() );
_context.save();
_context.translate( v1.x, v1.y );
_context.rotate( - element.rotation );
_context.scale( scaleX, scaleY );
_context.fillRect( -1, -1, 2, 2 );
_context.fillRect( - 0.5, - 0.5, 1, 1 );
_context.restore();
}
/* DEBUG
setStrokeStyle( 'rgb(255,255,0)' );
_context.beginPath();
_context.moveTo( v1.x - 10, v1.y );
_context.lineTo( v1.x + 10, v1.y );
_context.moveTo( v1.x, v1.y - 10 );
_context.lineTo( v1.x, v1.y + 10 );
_context.stroke();
*/
} else if ( material instanceof THREE.SpriteCanvasMaterial ) {
width = element.scale.x * _canvasWidthHalf;
height = element.scale.y * _canvasHeightHalf;
_elemBox.min.set( v1.x - width, v1.y - height );
_elemBox.max.set( v1.x + width, v1.y + height );
if ( _clipBox.isIntersectionBox( _elemBox ) === false ) {
_elemBox.makeEmpty();
return;
}
setStrokeStyle( material.color.getStyle() );
setFillStyle( material.color.getStyle() );
_context.save();
_context.translate( v1.x, v1.y );
_context.rotate( - element.rotation );
_context.scale( width, height );
_context.scale( scaleX, scaleY );
material.program( _context );
......@@ -559,6 +507,16 @@ THREE.CanvasRenderer = function ( parameters ) {
}
/* DEBUG
setStrokeStyle( 'rgb(255,255,0)' );
_context.beginPath();
_context.moveTo( v1.x - 10, v1.y );
_context.lineTo( v1.x + 10, v1.y );
_context.moveTo( v1.x, v1.y - 10 );
_context.lineTo( v1.x, v1.y + 10 );
_context.stroke();
*/
}
function renderLine( v1, v2, element, material ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册