|
@@ -8,6 +8,7 @@ THREE.CanvasRenderer = function () {
|
|
|
|
|
|
var _viewport = document.createElement( "canvas" ),
|
|
var _viewport = document.createElement( "canvas" ),
|
|
_context = _viewport.getContext( "2d" ),
|
|
_context = _viewport.getContext( "2d" ),
|
|
|
|
+ _width, _height, _widthHalf, _heightHalf,
|
|
_clipRect = new THREE.Rectangle(),
|
|
_clipRect = new THREE.Rectangle(),
|
|
_clearRect = new THREE.Rectangle( 0, 0, 0, 0 ),
|
|
_clearRect = new THREE.Rectangle( 0, 0, 0, 0 ),
|
|
_bboxRect = new THREE.Rectangle(),
|
|
_bboxRect = new THREE.Rectangle(),
|
|
@@ -18,12 +19,15 @@ THREE.CanvasRenderer = function () {
|
|
|
|
|
|
this.setSize = function ( width, height ) {
|
|
this.setSize = function ( width, height ) {
|
|
|
|
|
|
- _viewport.width = width;
|
|
|
|
- _viewport.height = height;
|
|
|
|
|
|
+ _width = width; _height = height;
|
|
|
|
+ _widthHalf = _width / 2; _heightHalf = _height / 2;
|
|
|
|
|
|
- _context.setTransform( 1, 0, 0, 1, width / 2, height / 2 );
|
|
|
|
|
|
+ _viewport.width = _width;
|
|
|
|
+ _viewport.height = _height;
|
|
|
|
|
|
- _clipRect.set( -width / 2, -height / 2, width / 2, height / 2 );
|
|
|
|
|
|
+ _context.setTransform( 1, 0, 0, 1, _widthHalf, _heightHalf );
|
|
|
|
+
|
|
|
|
+ _clipRect.set( - _widthHalf, - _heightHalf, _widthHalf, _heightHalf );
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
@@ -45,8 +49,7 @@ THREE.CanvasRenderer = function () {
|
|
uv1 = new THREE.Vector2(), uv2 = new THREE.Vector2(), uv3 = new THREE.Vector2(),
|
|
uv1 = new THREE.Vector2(), uv2 = new THREE.Vector2(), uv3 = new THREE.Vector2(),
|
|
suv1 = new THREE.Vector2(), suv2 = new THREE.Vector2(), suv3 = new THREE.Vector2(),
|
|
suv1 = new THREE.Vector2(), suv2 = new THREE.Vector2(), suv3 = new THREE.Vector2(),
|
|
suv1x, suv1y, suv2x, suv2y, suv3x, suv3y, denom, m11, m12, m21, m22, dx, dy,
|
|
suv1x, suv1y, suv2x, suv2y, suv3x, suv3y, denom, m11, m12, m21, m22, dx, dy,
|
|
- bitmap, bitmap_width, bitmap_height,
|
|
|
|
- size, overdraw;
|
|
|
|
|
|
+ bitmap, bitmapWidth, bitmapHeight, size;
|
|
|
|
|
|
if ( this.autoClear ) {
|
|
if ( this.autoClear ) {
|
|
|
|
|
|
@@ -69,112 +72,120 @@ THREE.CanvasRenderer = function () {
|
|
|
|
|
|
materialLength = element.material.length;
|
|
materialLength = element.material.length;
|
|
|
|
|
|
- for ( j = 0; j < materialLength; j++ ) {
|
|
|
|
|
|
+ _bboxRect.empty();
|
|
|
|
|
|
- material = element.material[ j ];
|
|
|
|
|
|
+ _context.beginPath();
|
|
|
|
|
|
- overdraw = material instanceof THREE.ColorFillMaterial || material instanceof THREE.FaceColorFillMaterial || material instanceof THREE.BitmapUVMappingMaterial;
|
|
|
|
|
|
+ if ( element instanceof THREE.RenderableParticle ) {
|
|
|
|
|
|
- _bboxRect.empty();
|
|
|
|
|
|
+ v1x = element.x * _widthHalf; v1y = element.y * _heightHalf;
|
|
|
|
+ size = element.size * _widthHalf;
|
|
|
|
|
|
- _context.beginPath();
|
|
|
|
|
|
+ _bboxRect.set( v1x - size, v1y - size, v1x + size, v1y + size );
|
|
|
|
|
|
- if ( element instanceof THREE.RenderableParticle ) {
|
|
|
|
|
|
+ if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
- size = element.size * element.screenZ;
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
- _bboxRect.set( element.x - size, element.y - size, element.x + size, element.y + size );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
+ _context.arc( v1x, v1y, size, 0, pi2, true );
|
|
|
|
|
|
- continue;
|
|
|
|
|
|
+ } else if ( element instanceof THREE.RenderableLine ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ v1x = element.v1.x * _widthHalf; v1y = element.v1.y * _heightHalf;
|
|
|
|
+ v2x = element.v2.x * _widthHalf; v2y = element.v2.y * _heightHalf;
|
|
|
|
+
|
|
|
|
+ _bboxRect.addPoint( v1x, v1y );
|
|
|
|
+ _bboxRect.addPoint( v2x, v2y );
|
|
|
|
|
|
- _context.arc( element.x, element.y, size, 0, pi2, true );
|
|
|
|
|
|
+ if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
- } else if ( element instanceof THREE.RenderableLine ) {
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
- v1x = element.v1.x; v1y = element.v1.y;
|
|
|
|
- v2x = element.v2.x; v2y = element.v2.y;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- _bboxRect.addPoint( v1x, v1y );
|
|
|
|
- _bboxRect.addPoint( v2x, v2y );
|
|
|
|
|
|
+ _context.moveTo( v1x, v1y );
|
|
|
|
+ _context.lineTo( v2x, v2y );
|
|
|
|
|
|
- if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
+ } else if ( element instanceof THREE.RenderableFace3 ) {
|
|
|
|
|
|
- continue;
|
|
|
|
|
|
+ element.v1.x *= _widthHalf; element.v1.y *= _heightHalf;
|
|
|
|
+ element.v2.x *= _widthHalf; element.v2.y *= _heightHalf;
|
|
|
|
+ element.v3.x *= _widthHalf; element.v3.y *= _heightHalf;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( element.overdraw ) {
|
|
|
|
|
|
- _context.moveTo( v1x, v1y );
|
|
|
|
- _context.lineTo( v2x, v2y );
|
|
|
|
|
|
+ expand( element.v1, element.v2 );
|
|
|
|
+ expand( element.v2, element.v3 );
|
|
|
|
+ expand( element.v3, element.v1 );
|
|
|
|
|
|
- } else if ( element instanceof THREE.RenderableFace3 ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if ( overdraw ) {
|
|
|
|
|
|
+ v1x = element.v1.x; v1y = element.v1.y;
|
|
|
|
+ v2x = element.v2.x; v2y = element.v2.y;
|
|
|
|
+ v3x = element.v3.x; v3y = element.v3.y;
|
|
|
|
|
|
- expand( element.v1, element.v2 );
|
|
|
|
- expand( element.v2, element.v3 );
|
|
|
|
- expand( element.v3, element.v1 );
|
|
|
|
|
|
+ _bboxRect.addPoint( v1x, v1y );
|
|
|
|
+ _bboxRect.addPoint( v2x, v2y );
|
|
|
|
+ _bboxRect.addPoint( v3x, v3y );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
- v1x = element.v1.x; v1y = element.v1.y;
|
|
|
|
- v2x = element.v2.x; v2y = element.v2.y;
|
|
|
|
- v3x = element.v3.x; v3y = element.v3.y;
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
- _bboxRect.addPoint( v1x, v1y );
|
|
|
|
- _bboxRect.addPoint( v2x, v2y );
|
|
|
|
- _bboxRect.addPoint( v3x, v3y );
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
+ _context.moveTo( v1x, v1y );
|
|
|
|
+ _context.lineTo( v2x, v2y );
|
|
|
|
+ _context.lineTo( v3x, v3y );
|
|
|
|
+ _context.lineTo( v1x, v1y );
|
|
|
|
|
|
- continue;
|
|
|
|
|
|
+ } else if ( element instanceof THREE.RenderableFace4 ) {
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ element.v1.x *= _widthHalf; element.v1.y *= _heightHalf;
|
|
|
|
+ element.v2.x *= _widthHalf; element.v2.y *= _heightHalf;
|
|
|
|
+ element.v3.x *= _widthHalf; element.v3.y *= _heightHalf;
|
|
|
|
+ element.v4.x *= _widthHalf; element.v4.y *= _heightHalf;
|
|
|
|
|
|
- _context.moveTo( v1x, v1y );
|
|
|
|
- _context.lineTo( v2x, v2y );
|
|
|
|
- _context.lineTo( v3x, v3y );
|
|
|
|
- _context.lineTo( v1x, v1y );
|
|
|
|
|
|
+ if ( element.overdraw ) {
|
|
|
|
|
|
- } else if ( element instanceof THREE.RenderableFace4 ) {
|
|
|
|
|
|
+ expand( element.v1, element.v2 );
|
|
|
|
+ expand( element.v2, element.v3 );
|
|
|
|
+ expand( element.v3, element.v4 );
|
|
|
|
+ expand( element.v4, element.v1 );
|
|
|
|
|
|
- if ( overdraw ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- expand( element.v1, element.v2 );
|
|
|
|
- expand( element.v2, element.v3 );
|
|
|
|
- expand( element.v3, element.v4 );
|
|
|
|
- expand( element.v4, element.v1 );
|
|
|
|
|
|
+ v1x = element.v1.x; v1y = element.v1.y;
|
|
|
|
+ v2x = element.v2.x; v2y = element.v2.y;
|
|
|
|
+ v3x = element.v3.x; v3y = element.v3.y;
|
|
|
|
+ v4x = element.v4.x; v4y = element.v4.y;
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ _bboxRect.addPoint( v1x, v1y );
|
|
|
|
+ _bboxRect.addPoint( v2x, v2y );
|
|
|
|
+ _bboxRect.addPoint( v3x, v3y );
|
|
|
|
+ _bboxRect.addPoint( v4x, v4y );
|
|
|
|
|
|
- v1x = element.v1.x; v1y = element.v1.y;
|
|
|
|
- v2x = element.v2.x; v2y = element.v2.y;
|
|
|
|
- v3x = element.v3.x; v3y = element.v3.y;
|
|
|
|
- v4x = element.v4.x; v4y = element.v4.y;
|
|
|
|
|
|
+ if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
- _bboxRect.addPoint( v1x, v1y );
|
|
|
|
- _bboxRect.addPoint( v2x, v2y );
|
|
|
|
- _bboxRect.addPoint( v3x, v3y );
|
|
|
|
- _bboxRect.addPoint( v4x, v4y );
|
|
|
|
|
|
+ continue;
|
|
|
|
|
|
- if ( !_clipRect.instersects( _bboxRect ) ) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- continue;
|
|
|
|
|
|
+ _context.moveTo( v1x, v1y );
|
|
|
|
+ _context.lineTo( v2x, v2y );
|
|
|
|
+ _context.lineTo( v3x, v3y );
|
|
|
|
+ _context.lineTo( v4x, v4y );
|
|
|
|
+ _context.lineTo( v1x, v1y );
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- _context.moveTo( v1x, v1y );
|
|
|
|
- _context.lineTo( v2x, v2y );
|
|
|
|
- _context.lineTo( v3x, v3y );
|
|
|
|
- _context.lineTo( v4x, v4y );
|
|
|
|
- _context.lineTo( v1x, v1y );
|
|
|
|
|
|
+ _context.closePath();
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for ( j = 0; j < materialLength; j++ ) {
|
|
|
|
|
|
- _context.closePath();
|
|
|
|
|
|
+ material = element.material[ j ];
|
|
|
|
|
|
if ( material instanceof THREE.ColorFillMaterial ) {
|
|
if ( material instanceof THREE.ColorFillMaterial ) {
|
|
|
|
|
|
@@ -211,28 +222,36 @@ THREE.CanvasRenderer = function () {
|
|
} else if ( material instanceof THREE.BitmapUVMappingMaterial ) {
|
|
} else if ( material instanceof THREE.BitmapUVMappingMaterial ) {
|
|
|
|
|
|
bitmap = material.bitmap;
|
|
bitmap = material.bitmap;
|
|
- bitmap_width = bitmap.width;
|
|
|
|
- bitmap_height = bitmap.height;
|
|
|
|
|
|
+ bitmapWidth = bitmap.width;
|
|
|
|
+ bitmapHeight = bitmap.height;
|
|
|
|
|
|
uv1.copy( element.uvs[ 0 ] ); uv2.copy( element.uvs[ 1 ] ); uv3.copy( element.uvs[ 2 ] );
|
|
uv1.copy( element.uvs[ 0 ] ); uv2.copy( element.uvs[ 1 ] ); uv3.copy( element.uvs[ 2 ] );
|
|
suv1.copy( uv1 ); suv2.copy( uv2 ); suv3.copy( uv3 );
|
|
suv1.copy( uv1 ); suv2.copy( uv2 ); suv3.copy( uv3 );
|
|
|
|
|
|
- suv1.x *= bitmap_width; suv1.y *= bitmap_height;
|
|
|
|
- suv2.x *= bitmap_width; suv2.y *= bitmap_height;
|
|
|
|
- suv3.x *= bitmap_width; suv3.y *= bitmap_height;
|
|
|
|
|
|
+ suv1.x *= bitmapWidth; suv1.y *= bitmapHeight;
|
|
|
|
+ suv2.x *= bitmapWidth; suv2.y *= bitmapHeight;
|
|
|
|
+ suv3.x *= bitmapWidth; suv3.y *= bitmapHeight;
|
|
|
|
+
|
|
|
|
+ if ( element.overdraw ) {
|
|
|
|
|
|
- expand( suv1, suv2 );
|
|
|
|
- expand( suv2, suv3 );
|
|
|
|
- expand( suv3, suv1 );
|
|
|
|
|
|
+ expand( suv1, suv2 );
|
|
|
|
+ expand( suv2, suv3 );
|
|
|
|
+ expand( suv3, suv1 );
|
|
|
|
|
|
- suv1x = ( uv1.x === 0 ) ? 1 : ( uv1.x === 1 ) ? suv1.x - 1 : suv1.x;
|
|
|
|
- suv1y = ( uv1.y === 0 ) ? 1 : ( uv1.y === 1 ) ? suv1.y - 1 : suv1.y;
|
|
|
|
|
|
+ suv1.x = ( uv1.x === 0 ) ? 1 : ( uv1.x === 1 ) ? suv1.x - 1 : suv1.x;
|
|
|
|
+ suv1.y = ( uv1.y === 0 ) ? 1 : ( uv1.y === 1 ) ? suv1.y - 1 : suv1.y;
|
|
|
|
|
|
- suv2x = ( uv2.x === 0 ) ? 1 : ( uv2.x === 1 ) ? suv2.x - 1 : suv2.x;
|
|
|
|
- suv2y = ( uv2.y === 0 ) ? 1 : ( uv2.y === 1 ) ? suv2.y - 1 : suv2.y;
|
|
|
|
|
|
+ suv2.x = ( uv2.x === 0 ) ? 1 : ( uv2.x === 1 ) ? suv2.x - 1 : suv2.x;
|
|
|
|
+ suv2.y = ( uv2.y === 0 ) ? 1 : ( uv2.y === 1 ) ? suv2.y - 1 : suv2.y;
|
|
|
|
+
|
|
|
|
+ suv3.x = ( uv3.x === 0 ) ? 1 : ( uv3.x === 1 ) ? suv3.x - 1 : suv3.x;
|
|
|
|
+ suv3.y = ( uv3.y === 0 ) ? 1 : ( uv3.y === 1 ) ? suv3.y - 1 : suv3.y;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
- suv3x = ( uv3.x === 0 ) ? 1 : ( uv3.x === 1 ) ? suv3.x - 1 : suv3.x;
|
|
|
|
- suv3y = ( uv3.y === 0 ) ? 1 : ( uv3.y === 1 ) ? suv3.y - 1 : suv3.y;
|
|
|
|
|
|
+ suv1x = suv1.x; suv1y = suv1.y;
|
|
|
|
+ suv2x = suv2.x; suv2y = suv2.y;
|
|
|
|
+ suv3x = suv3.x; suv3y = suv3.y;
|
|
|
|
|
|
// Textured triangle drawing by Thatcher Ulrich.
|
|
// Textured triangle drawing by Thatcher Ulrich.
|
|
// http://tulrich.com/geekstuff/canvas/jsgl.js
|
|
// http://tulrich.com/geekstuff/canvas/jsgl.js
|