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

WebGLRenderer: Now also creating normalArray, colorArray by default.

This should "fix" all the problems of textures not rendering when the first instance of the geometry rendered didn't use.
Yet another premature optimisation that created a lot of confusion :(
上级 31df6e08
......@@ -845,19 +845,16 @@ THREE.WebGLRenderer = function ( parameters ) {
ntris = faces3.length * 1,
nlines = faces3.length * 3,
material = getBufferMaterial( object, geometryGroup ),
uvType = true,
normalType = bufferGuessNormalType( material ),
vertexColorType = bufferGuessVertexColorType( material );
// console.log( "uvType", uvType, "normalType", normalType, "vertexColorType", vertexColorType, object, geometryGroup, material );
material = getBufferMaterial( object, geometryGroup );
geometryGroup.__vertexArray = new Float32Array( nvertices * 3 );
geometryGroup.__normalArray = new Float32Array( nvertices * 3 );
geometryGroup.__colorArray = new Float32Array( nvertices * 3 );
geometryGroup.__uvArray = new Float32Array( nvertices * 2 );
if ( normalType ) {
if ( geometry.faceVertexUvs.length > 1 ) {
geometryGroup.__normalArray = new Float32Array( nvertices * 3 );
geometryGroup.__uv2Array = new Float32Array( nvertices * 2 );
}
......@@ -867,28 +864,6 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( vertexColorType ) {
geometryGroup.__colorArray = new Float32Array( nvertices * 3 );
}
if ( uvType ) {
if ( geometry.faceVertexUvs.length > 0 ) {
geometryGroup.__uvArray = new Float32Array( nvertices * 2 );
}
if ( geometry.faceVertexUvs.length > 1 ) {
geometryGroup.__uv2Array = new Float32Array( nvertices * 2 );
}
}
if ( object.geometry.skinWeights.length && object.geometry.skinIndices.length ) {
geometryGroup.__skinIndexArray = new Float32Array( nvertices * 4 );
......@@ -1004,60 +979,6 @@ THREE.WebGLRenderer = function ( parameters ) {
};
function bufferGuessNormalType ( material ) {
// only MeshBasicMaterial and MeshDepthMaterial don't need normals
if ( ( material instanceof THREE.MeshBasicMaterial && ! material.envMap ) || material instanceof THREE.MeshDepthMaterial ) {
return false;
}
if ( materialNeedsSmoothNormals( material ) ) {
return THREE.SmoothShading;
} else {
return THREE.FlatShading;
}
};
function bufferGuessVertexColorType( material ) {
if ( material.vertexColors ) {
return material.vertexColors;
}
return false;
};
function bufferGuessUVType( material ) {
// material must use some texture to require uvs
if ( material.map ||
material.lightMap ||
material.bumpMap ||
material.normalMap ||
material.specularMap ||
material.alphaMap ||
material instanceof THREE.ShaderMaterial ) {
return true;
}
return false;
};
//
function initDirectBuffers( geometry ) {
......@@ -1579,11 +1500,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
var normalType = bufferGuessNormalType( material ),
vertexColorType = bufferGuessVertexColorType( material ),
uvType = bufferGuessUVType( material ),
needsSmoothNormals = ( normalType === THREE.SmoothShading );
var needsSmoothNormals = materialNeedsSmoothNormals( material );
var f, fl, fi, face,
vertexNormals, faceNormal, normal,
......@@ -1844,7 +1761,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( dirtyColors && vertexColorType ) {
if ( dirtyColors ) {
for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
......@@ -1853,7 +1770,7 @@ THREE.WebGLRenderer = function ( parameters ) {
vertexColors = face.vertexColors;
faceColor = face.color;
if ( vertexColors.length === 3 && vertexColorType === THREE.VertexColors ) {
if ( vertexColors.length === 3 && material.vertexColors === THREE.VertexColors ) {
c1 = vertexColors[ 0 ];
c2 = vertexColors[ 1 ];
......@@ -1928,7 +1845,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( dirtyNormals && normalType ) {
if ( dirtyNormals ) {
for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
......@@ -1972,7 +1889,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( dirtyUvs && obj_uvs && uvType ) {
if ( dirtyUvs && obj_uvs ) {
for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
......@@ -2004,7 +1921,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
if ( dirtyUvs && obj_uvs2 && uvType ) {
if ( dirtyUvs && obj_uvs2 ) {
for ( f = 0, fl = chunk_faces3.length; f < fl; f ++ ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册