我尝试导入我的3D模型的JSON导出文件并将其导入Three.js,但似乎缺少一些面孔。
我不确定这是否是导出问题,因为当我旋转它时,左脸存在但右脸不存在,反之亦然。
这是我在Blender中的原始模型:
var scene,camera,renderer;
var WIDTH = window.innerWidth;
var HEIGHT = window.innerHeight;
var SPEED = 0.01;
function init() {
scene = new THREE.Scene();
initMesh();
initCamera();
initLights();
initRenderer();
document.body.appendChild(renderer.domElement);
}
function initCamera() {
camera = new THREE.PerspectiveCamera(70, WIDTH / HEIGHT, 1, 10);
camera.position.set(0, 3.5, 5);
camera.lookAt(scene.position);
}
function initRenderer() {
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(WIDTH, HEIGHT);
}
function initLights() {
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.8 );
directionalLight.position.set( 0, 1, 0 );
scene.add( directionalLight );
}
var mesh = null;
function initMesh() {
var loader = new THREE.JSONLoader();
loader.load('./model.json', function(geometry, materials) {
mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
mesh.scale.x = mesh.scale.y = mesh.scale.z = 0.75;
mesh.translation = THREE.GeometryUtils.center(geometry);
mesh.position.x = -5;
scene.add(mesh);
});
}
function rotateMesh() {
if (!mesh) {
return;
}
mesh.rotation.y -= SPEED;
}
function render() {
requestAnimationFrame(render);
rotateMesh();
renderer.render(scene, camera);
}
init();
render();
希望你能帮我解决这个问题。 提前谢谢!
答案 0 :(得分:2)
我怀疑你的问题与指向错误方向的面部法线有关。要检查是否是这种情况,您可以尝试将所有材料设置为双面:
materials.forEach(function(mat) {
mat.side = THREE.DoubleSide;
});
使用双面模式时,无论法线方向如何,都会绘制面,因此如果启用,您应该看到所有面。
或者您可以使用THREE.FaceNormalsHelper自己查看法线。
scene.add(new THREE.FaceNormalsHelper(mesh, 2, 0x00ff00, 1));
这将为所有面部呈现指示正常方向的箭头。
如果法线错误,您可以在搅拌机中通过选择所有受影响的面并使用命令Mesh> Faces> Flip Normals从菜单或右侧的工具面板中选择"阴影/ UV" -Tab。有时只选择所有面孔并运行"重新计算法线"从工具也将工作。 Blender在" Mesh Display" -Section的右侧菜单中也有面部法线显示模式。