gpt4 book ai didi

webgl - 如何检测网格上亮面的数量?

转载 作者:行者123 更新时间:2023-12-04 22:23:19 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com