我将obj文件导入编辑器然后将几何体导出到js文件,当我把它放在我的代码上时,firefox调试中没有出现任何错误:“类型错误:t1未定义”。 我将模型更改为MaxExporter导出的.js文件,并选择“导出UV”选项,“导出法线”,它工作正常。 接下来,我将模型更改为MaxExporter导出的文件,只选择了“导出UV”,再次输入“类型错误:t1未定义”,这是一个错误还是问题只是我的代码,以及如何修复它? / p>
这是我的代码:
var ambient = 0xffffff, diffuse = 0xffffff, specular = 0x000000, shininess = 100;
var shader = THREE.ShaderLib[ "normalmap" ];
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
uniforms[ "tNormal" ].value = THREE.ImageUtils.loadTexture( "md/normals.jpg" );
uniforms[ "uNormalScale" ].value.set( 1.5, 1.5 );
uniforms[ "tDiffuse" ].value = THREE.ImageUtils.loadTexture( "md/diff.jpg" );
uniforms[ "enableDiffuse" ].value = true;
uniforms[ "uDiffuseColor" ].value.setHex( diffuse );
uniforms[ "uSpecularColor" ].value.setHex( specular );
uniforms[ "uAmbientColor" ].value.setHex( ambient );
uniforms[ "uShininess" ].value = shininess;
var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true };
var material = new THREE.ShaderMaterial( parameters );
loader = new THREE.JSONLoader( true );
loader.load( "md/model.js", function( geometry ) { createScene( geometry, 100, material ) } );
container.appendChild( renderer.domElement );
window.addEventListener('resize', onWindowResize, false);
}
function createScene( geometry, scale, material ) {
geometry.computeTangents();
geometry.computeVertexNormals();
mesh = new THREE.Mesh( geometry, material );
mesh.castShadow = true;
mesh.receiveShadow = true;
mesh.position.y = - 0;
mesh.scale.x = mesh.scale.y = mesh.scale.z = scale;
scene.add( mesh );
}
答案 0 :(得分:0)
您的代码存在问题。
geometry.computeTangents()
需要顶点法线。您需要切换订单。
geometry.computeVertexNormals();
geometry.computeTangents();
修正错误。
但是,geometry.faces[4].normal
为零。您的模型有问题。
three.js.r.63