我的对象在Three.js中不能反射光线。

3

我在three.js场景中有一些基于CubeGeometry的网格,它们都反射了我全局使用的PointLight。但其中一个是用“手工”方式制作的,只使用了THREE.Geometry(通过代码添加顶点和面),却没有反射。即使它没有颜色,我也只能为其设置颜色,如果我将THREE.Color设置为MeshPhongMaterial上的“emissive”键。

这个几何体是由一个JS函数动态生成的。我正在使用以下灯光:

    pointLight = new THREE.PointLight(0xFFFEF0, 1, 100000)
    pointLight.position = camera.position;
    scene.add(
        pointLight
    );  

我正在使用以下代码创建所述的网格:

        var floor = new THREE.Mesh(
            ShelfArchitect.Utils.getFloorGeometry(walls), 
            new THREE.MeshPhongMaterial(materialParams)
        );

我需要在materialParams上添加一些内容吗?或者问题出在哪里?

我刚刚创建了一个几何体宽度变量 geom = new THREE.Geometry();,并使用 geom.vertices.push( ... ) 添加了一些顶点和 geom.faces.push( ... ) 添加了一些面。接下来我还需要做什么?在你的回答后,我尝试调用了 geom.computeVertexNormals(),但它仍然不起作用。谢谢。 - RobbeR
1
computeVertexNormals() 需要先执行 computeFaceNormals() - WestLangley
1个回答

4

听起来像是手工制作的几何图形缺失或顶点法线不正确。

你可以这样做:

geometry.computeFaceNormals();
geometry.computeVertexNormals();

computeFaceNormals 看起来不像是存在的东西。 - Christian Vincenzo Traina
@ChristianVincenzoTraina 正确。这个问题涉及到了 three.js 的一个旧版本。 - WestLangley
谢谢,我对three.js还是很新手,很难区分什么是旧的,什么是新的。 - Christian Vincenzo Traina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接