Three.js MeshPhongMaterial线框照明

时间:2017-04-20 00:47:22

标签: javascript three.js

当我尝试使用线框将meshphongmaterial视图放到arrayBufferGeometry上时,其中vetexColors设置为THREE.vertexColors;照明仅适用于1张随机脸。当我切换到MeshBasicmaterial时,我得到了所需的行为。如果线框设置为false,则phong材质看起来很好并且点亮:

 geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
    geometry.addAttribute('color', new THREE.BufferAttribute(colors, 3));
    geometry.computeFaceNormals();
    geometry.computeVertexNormals();

    console.log(geometry);
    var material = new THREE.MeshBasicMaterial({
        side: THREE.DoubleSide,
        wireframe: true,
        transparent: false,
        vertexColors: THREE.VertexColors, // CHANGED
        shininess: 100,
        //     color: 0xff0000,
        shading: THREE.SmoothShading
    });

    console.log(material);

    var terrainMesh = new THREE.Mesh(geometry, material);
    terrainMesh.name = 'GRD';
    terrainMesh.receiveShadow = true;
    terrainMesh.castShadow = true;
    console.log(terrainMesh);
    return terrainMesh;

我需要在材质后重新计算顶点法线吗?是否有理由说明照明适用于实心面而不是线框?

1 个答案:

答案 0 :(得分:1)

这是一个照明问题。

我有各种各样的灯光,AmbientLight,DirectionalLight代表太阳,以及跟随相机目标的SpotLight,以突出显示用户正在看的内容。

这些都没有正确照亮线框。然后我跟着MeshPhongMaterial example,看到他们使用了点光源。我假设点光和聚光灯之间的唯一区别是方向和目标。这是不正确的,因为点光源最终起作用。

另一个问题是点光源到线框的照明必须位于材料的正面(无论MeshPhongMaterial中的侧面属性如何),并且不能从背面照射。我的几何面朝下,因为加载的文件格式与标准相反。必须将点光源定位在几何形状下以照亮材料。我最后添加了一个反向太阳型灯,使用PointLight从下面照亮几何体。

我仍然不理解为什么线框仅由PointLight照亮,为什么它不会从后面照亮THREE.DoubleSide。