模型在threejs中的透明问题

时间:2015-11-10 14:18:11

标签: javascript three.js

我已经在stackoverflow和其他尝试学习三个js的地方发了很多。这是我的第一个项目,并将其用作实验。我已经成功加载了OBJ和MTL文件。我有一个问题,三维模型的部分是透明的。 model

你可以注意到鞋子的舌头以及其他地方的透明度。我尝试将具有相同纹理文件的模型上传到http://www.3dvieweronline.com/并且渲染完美!

这是我的代码:

(function() {

var scene, camera, renderer;
var geometry, material, mesh, sneaker;

init();
animate();

function init() {

    scene = new THREE.Scene();
    var WIDTH = window.innerWidth,
        HEIGHT = window.innerHeight;

        var ambient = new THREE.AmbientLight( 0x444444 );
                scene.add( ambient );

    camera = new THREE.PerspectiveCamera( 3, WIDTH / HEIGHT, 1, 20000 );
    camera.position.z = 1000;



    window.addEventListener('resize', function() {
      var WIDTH = window.innerWidth,
          HEIGHT = window.innerHeight;
      renderer.setSize(WIDTH, HEIGHT);
      camera.aspect = WIDTH / HEIGHT;
      camera.updateProjectionMatrix();
    });

    geometry = new THREE.BoxGeometry( 200, 200, 200 );
    material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );

    mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );


    // prepare loader and load the model
    var oLoader = new THREE.OBJMTLLoader();
    oLoader.load('models/sneaker.obj', 'models/sneaker.mtl', function(object) {

      object.scale.set(1, 1, 1);
      object.rotation.y = 600;
      object.rotation.z= 600;
      sneaker = object;
      scene.add(sneaker);
    });






    renderer = new THREE.WebGLRenderer();
    renderer.setSize( WIDTH, HEIGHT );

    renderer.setClearColor(0x333F47, 1);

    var light = new THREE.PointLight(0xffffff);
    light.position.set(-100,200,100);
    scene.add(light);

    document.body.appendChild( renderer.domElement );

}

function animate() {

    requestAnimationFrame( animate );

    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.02;
    sneaker.rotation.x += 0.01;
    sneaker.rotation.y += 0.02;


    renderer.render( scene, camera );

}

})();

请帮忙。

1 个答案:

答案 0 :(得分:0)

将网格分割成两个网格,一个带有非透明部分,另一个带有它们...... 禁用three.js渲染器的深度排序... 确保实心网格应用了非透明材质,透明部分采用透明材质。禁用透明材质上的深度写入。

首先添加实体网格,然后添加透明网格。

您遇到的问题是z排序和透明度是互斥的。