当我在THREE.BoxGeometry
对象上设置一个点光源时,它看起来像这样:
THREE.BoxGeometry with point light
var light = new THREE.PointLight (0xffffff, 1, 100);
light.position.set (10, 10, 10);
scene.add (light);
var geometry = new THREE.BoxGeometry (1, 1, 1);
var material = new THREE.MeshPhongMaterial ();
var cube = new THREE.Mesh (geometry, material);
scene.add (cube);
当我现在在THREE.PolyhedronGeometry
对象上设置一个点光源时,它看起来像这样:
THREE.PolyhedronGeometry with point light
var light = new THREE.PointLight (0xffffff, 1, 100);
light.position.set (10, 10, 10);
scene.add (light);
var geometry = new THREE.PolyhedronGeometry (vertices, faces, 1, 0);
var vertices = [-1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1,-1,-1,1,1,-1,1,1,1,1,-1,1,1];
var faces = [2,1,0,0,3,2,0,4,7,7,3,0,0,1,5,5,4,0,1,2,6,6,5,1,2,3,7,7,6,2,4,5,6,6,7,4];
var material = new THREE.MeshPhongMaterial ();
var cube = new THREE.Mesh (geometry, material);
scene.add (cube);
我想知道,这种行为来自何处以及如何设法制作多面体'面孔表现得和盒子一样好吗?
我读到它可能与geometry.computeFaceNormals()
有关。
所以我尝试了,但它没有任何区别。
答案 0 :(得分:0)
当某些事物与表面上的光线表现不同时,首先要看的是正常人
盒面
也是如此boxGeometry.faces[i].normal.equals(boxGeometry.faces[i].vertexNormals[j]);//true
因此,每个面部的框只有简单的法线
多面体与顶点法线具有不同的面法线
polyhedronGeo.faces[i].normal.equals(polyhedronGeo.faces[i].vertexNormals[j]);//not true
并且一些顶点法线彼此不相等
polyhedronGeo.faces[i].vertexNormals[j].equals(polyhedronGeo.faces[i].vertexNormals[k]);
//not true for some j,k
这就是为什么灯看起来很〜阴影 - 从vertexNormals为着色器插入法线 修改多面体看起来像框只需更改顶点notmals以匹配面法线
至于
geometry.computeFaceNormals();
它只会计算面法线,而不是vertexNormals
还有另一项功能
geometry.computeVertexNormals();
但是这将创建多面体
中的顶点法线答案 1 :(得分:0)
谢谢Derte。你的反思让我更接近这一点。因此,对于高级关键字,我发现了这一点:https://github.com/mrdoob/three.js/issues/1982
我的问题的答案是这一行,为“自由形式”展平阴影:
material.shading = THREE.FlatShading;