|
@@ -8188,6 +8188,7 @@ THREE.Projector = function () {
|
|
|
var RenderList = function () {
|
|
|
|
|
|
var normals = [];
|
|
|
+ var uvs = [];
|
|
|
|
|
|
var object = null;
|
|
|
var material = null;
|
|
@@ -8202,6 +8203,7 @@ THREE.Projector = function () {
|
|
|
normalMatrix.getNormalMatrix( object.matrixWorld );
|
|
|
|
|
|
normals.length = 0;
|
|
|
+ uvs.length = 0;
|
|
|
|
|
|
};
|
|
|
|
|
@@ -8241,6 +8243,12 @@ THREE.Projector = function () {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ var pushUv = function ( x, y ) {
|
|
|
+
|
|
|
+ uvs.push( x, y );
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
var checkTriangleVisibility = function ( v1, v2, v3 ) {
|
|
|
|
|
|
if ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;
|
|
@@ -8303,9 +8311,14 @@ THREE.Projector = function () {
|
|
|
var offset = arguments[ i ] * 3;
|
|
|
var normal = _face.vertexNormalsModel[ i ];
|
|
|
|
|
|
- normal.set( normals[ offset + 0 ], normals[ offset + 1 ], normals[ offset + 2 ] );
|
|
|
+ normal.set( normals[ offset ], normals[ offset + 1 ], normals[ offset + 2 ] );
|
|
|
normal.applyMatrix3( normalMatrix ).normalize();
|
|
|
|
|
|
+ var offset2 = arguments[ i ] * 2;
|
|
|
+
|
|
|
+ var uv = _face.uvs[ i ];
|
|
|
+ uv.set( uvs[ offset2 ], uvs[ offset2 + 1 ] );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
_face.vertexNormalsLength = 3;
|
|
@@ -8325,6 +8338,7 @@ THREE.Projector = function () {
|
|
|
checkBackfaceCulling: checkBackfaceCulling,
|
|
|
pushVertex: pushVertex,
|
|
|
pushNormal: pushNormal,
|
|
|
+ pushUv: pushUv,
|
|
|
pushLine: pushLine,
|
|
|
pushTriangle: pushTriangle
|
|
|
}
|
|
@@ -8335,7 +8349,7 @@ THREE.Projector = function () {
|
|
|
|
|
|
this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
|
|
|
|
|
|
- var object, geometry, vertices, faces, face, faceVertexNormals, faceVertexUvs, uvs,
|
|
|
+ var object, geometry, vertices, faces, face, faceVertexNormals, faceVertexUvs,
|
|
|
isFaceMaterial, objectMaterials;
|
|
|
|
|
|
_faceCount = 0;
|
|
@@ -8394,6 +8408,18 @@ THREE.Projector = function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ if ( attributes.uv !== undefined ) {
|
|
|
+
|
|
|
+ var uvs = attributes.uv.array;
|
|
|
+
|
|
|
+ for ( var i = 0, l = uvs.length; i < l; i += 2 ) {
|
|
|
+
|
|
|
+ renderList.pushUv( uvs[ i ], uvs[ i + 1 ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
if ( attributes.index !== undefined ) {
|
|
|
|
|
|
var indices = attributes.index.array;
|
|
@@ -8437,7 +8463,7 @@ THREE.Projector = function () {
|
|
|
|
|
|
vertices = geometry.vertices;
|
|
|
faces = geometry.faces;
|
|
|
- faceVertexUvs = geometry.faceVertexUvs;
|
|
|
+ faceVertexUvs = geometry.faceVertexUvs[ 0 ];
|
|
|
|
|
|
_normalMatrix.getNormalMatrix( _modelMatrix );
|
|
|
|
|
@@ -8557,15 +8583,13 @@ THREE.Projector = function () {
|
|
|
|
|
|
_face.vertexNormalsLength = faceVertexNormals.length;
|
|
|
|
|
|
- for ( var c = 0, cl = Math.min( faceVertexUvs.length, 3 ); c < cl; c ++ ) {
|
|
|
-
|
|
|
- uvs = faceVertexUvs[ c ][ f ];
|
|
|
+ var vertexUvs = faceVertexUvs[ f ];
|
|
|
|
|
|
- if ( uvs === undefined ) continue;
|
|
|
+ if ( vertexUvs !== undefined ) {
|
|
|
|
|
|
- for ( var u = 0, ul = uvs.length; u < ul; u ++ ) {
|
|
|
+ for ( var u = 0; u < 3; u ++ ) {
|
|
|
|
|
|
- _face.uvs[ c ][ u ] = uvs[ u ];
|
|
|
+ _face.uvs[ u ].copy( vertexUvs[ u ] );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -16963,7 +16987,7 @@ THREE.CanvasRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( material.map.mapping instanceof THREE.UVMapping ) {
|
|
|
|
|
|
- _uvs = element.uvs[ 0 ];
|
|
|
+ _uvs = element.uvs;
|
|
|
patternPath( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uvs[ uv1 ].x, _uvs[ uv1 ].y, _uvs[ uv2 ].x, _uvs[ uv2 ].y, _uvs[ uv3 ].x, _uvs[ uv3 ].y, material.map );
|
|
|
|
|
|
}
|
|
@@ -27152,7 +27176,7 @@ THREE.RenderableFace = function () {
|
|
|
|
|
|
this.color = null;
|
|
|
this.material = null;
|
|
|
- this.uvs = [[]];
|
|
|
+ this.uvs = [ new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() ];
|
|
|
|
|
|
this.z = 0;
|
|
|
|
|
@@ -33580,7 +33604,7 @@ THREE.LatheGeometry.prototype = Object.create( THREE.Geometry.prototype );
|
|
|
|
|
|
THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {
|
|
|
|
|
|
- THREE.Geometry.call( this );
|
|
|
+ THREE.BufferGeometry.call( this );
|
|
|
|
|
|
this.parameters = {
|
|
|
width: width,
|
|
@@ -33589,70 +33613,83 @@ THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments )
|
|
|
heightSegments: heightSegments
|
|
|
};
|
|
|
|
|
|
- var ix, iz;
|
|
|
var width_half = width / 2;
|
|
|
var height_half = height / 2;
|
|
|
|
|
|
var gridX = widthSegments || 1;
|
|
|
- var gridZ = heightSegments || 1;
|
|
|
+ var gridY = heightSegments || 1;
|
|
|
|
|
|
var gridX1 = gridX + 1;
|
|
|
- var gridZ1 = gridZ + 1;
|
|
|
+ var gridY1 = gridY + 1;
|
|
|
|
|
|
var segment_width = width / gridX;
|
|
|
- var segment_height = height / gridZ;
|
|
|
+ var segment_height = height / gridY;
|
|
|
|
|
|
- var normal = new THREE.Vector3( 0, 0, 1 );
|
|
|
+ var vertices = new Float32Array( gridX1 * gridY1 * 3 );
|
|
|
+ var normals = new Float32Array( gridX1 * gridY1 * 3 );
|
|
|
+ var uvs = new Float32Array( gridX1 * gridY1 * 2 );
|
|
|
|
|
|
- for ( iz = 0; iz < gridZ1; iz ++ ) {
|
|
|
+ var offset = 0;
|
|
|
+ var offset2 = 0;
|
|
|
|
|
|
- var y = iz * segment_height - height_half;
|
|
|
+ for ( var iy = 0; iy < gridY1; iy ++ ) {
|
|
|
|
|
|
- for ( ix = 0; ix < gridX1; ix ++ ) {
|
|
|
+ var y = iy * segment_height - height_half;
|
|
|
+
|
|
|
+ for ( var ix = 0; ix < gridX1; ix ++ ) {
|
|
|
|
|
|
var x = ix * segment_width - width_half;
|
|
|
|
|
|
- this.vertices.push( new THREE.Vector3( x, - y, 0 ) );
|
|
|
+ vertices[ offset ] = x;
|
|
|
+ vertices[ offset + 1 ] = - y;
|
|
|
+
|
|
|
+ normals[ offset + 2 ] = 1;
|
|
|
+
|
|
|
+ uvs[ offset2 ] = ix / gridX;
|
|
|
+ uvs[ offset2 + 1 ] = 1 - ( iy / gridY );
|
|
|
+
|
|
|
+ offset += 3;
|
|
|
+ offset2 += 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- for ( iz = 0; iz < gridZ; iz ++ ) {
|
|
|
+ offset = 0;
|
|
|
|
|
|
- for ( ix = 0; ix < gridX; ix ++ ) {
|
|
|
+ var indices = new Uint16Array( gridX * gridY * 6 );
|
|
|
|
|
|
- var a = ix + gridX1 * iz;
|
|
|
- var b = ix + gridX1 * ( iz + 1 );
|
|
|
- var c = ( ix + 1 ) + gridX1 * ( iz + 1 );
|
|
|
- var d = ( ix + 1 ) + gridX1 * iz;
|
|
|
+ for ( var iy = 0; iy < gridY; iy ++ ) {
|
|
|
|
|
|
- var uva = new THREE.Vector2( ix / gridX, 1 - iz / gridZ );
|
|
|
- var uvb = new THREE.Vector2( ix / gridX, 1 - ( iz + 1 ) / gridZ );
|
|
|
- var uvc = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - ( iz + 1 ) / gridZ );
|
|
|
- var uvd = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - iz / gridZ );
|
|
|
+ for ( var ix = 0; ix < gridX; ix ++ ) {
|
|
|
|
|
|
- var face = new THREE.Face3( a, b, d );
|
|
|
- face.normal.copy( normal );
|
|
|
- face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
|
|
|
+ var a = ix + gridX1 * iy;
|
|
|
+ var b = ix + gridX1 * ( iy + 1 );
|
|
|
+ var c = ( ix + 1 ) + gridX1 * ( iy + 1 );
|
|
|
+ var d = ( ix + 1 ) + gridX1 * iy;
|
|
|
|
|
|
- this.faces.push( face );
|
|
|
- this.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );
|
|
|
+ indices[ offset ] = a;
|
|
|
+ indices[ offset + 1 ] = b;
|
|
|
+ indices[ offset + 2 ] = d;
|
|
|
|
|
|
- face = new THREE.Face3( b, c, d );
|
|
|
- face.normal.copy( normal );
|
|
|
- face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
|
|
|
+ indices[ offset + 3 ] = b;
|
|
|
+ indices[ offset + 4 ] = c;
|
|
|
+ indices[ offset + 5 ] = d;
|
|
|
|
|
|
- this.faces.push( face );
|
|
|
- this.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );
|
|
|
+ offset += 6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+ this.attributes[ 'index' ] = { array: indices, itemSize: 1 };
|
|
|
+ this.attributes[ 'position' ] = { array: vertices, itemSize: 3 };
|
|
|
+ this.attributes[ 'normal' ] = { array: normals, itemSize: 3 };
|
|
|
+ this.attributes[ 'uv' ] = { array: uvs, itemSize: 2 };
|
|
|
+
|
|
|
};
|
|
|
|
|
|
-THREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype );
|
|
|
+THREE.PlaneGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );
|
|
|
|
|
|
/**
|
|
|
* @author Kaleb Murphy
|