我在 THREE.scene
中排列了许多对象,我想计算或检索一个相对值,该值指示每个对象从单个 PointLight
源接收的光量。简化示例:
将光定位在相机上时,由于 6 个面中有 3 个完全暴露,因此 Block 1 的值可能为 0.50,而 2 为 ~0.33, 3 为 ~1.67。
我可能可以通过从光线向每个面的中心绘制一条光线并查看相交来实现这一点,但我假设可以直接检索每个面的亮度级别。
最佳答案
此代码考虑了对象的全局矩阵。
var amount = 0;
var rotationMatrix = new THREE.Matrix4();
var vector = new THREE.Vector3();
var centroid = new THREE.Vector3();
var normal = new THREE.Vector3();
for ( var i = 0; i < objects.length; i ++ ) {
var object = objects[ i ];
rotationMatrix.extractRotation( object.matrixWorld );
for ( var j = 0; j < object.geometry.faces.length; j ++ ) {
var face = object.geometry.faces[ j ];
centroid.copy( face.centroid );
object.matrixWorld.multiplyVector3( centroid );
normal.copy( face.normal );
rotationMatrix.multiplyVector3( normal );
vector.sub( light.position, centroid ).normalize();
if ( normal.dot( vector ) > 0 ) amount ++;
}
}
关于webgl - 如何检测网格上亮面的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725501/