gpt4 book ai didi

java - 计算一个简单三角形的每面法线

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:59 24 4
gpt4 key购买 nike

我一直在搞一些 3D 的东西(更具体地说是 LibGdx,但这对这个问题来说无关紧要),最近我发现了一个问题,试图计算一个简单三角形的每面法线。< br/>我生成的三角形网格具有以下顶点(也显示在下面的链接中):

v0 = [3 , 0 , 0]//X, Y, Z
v1 = [1.49 , 0.86 , 0]//X, Y, Z
v2 = [3 , 0 , -1]//X, Y, Z

为了计算该三角形网格的面法线,我使用了一个可以在许多教程/示例网站中找到的函数(稍作修改):

private Vector3 calculateNormal(float vX1, float vY1, float vZ1,                                float vX2, float vY2, float vZ2,                                float vX3, float vY3, float vZ3) {        Vector3 edge1 = new Vector3(vX1, vY1, vZ1).sub(vX2, vY2, vZ2);        Vector3 edge2 = new Vector3(vX2, vY2, vZ2).sub(vX3, vY3, vZ3);        Vector3 crsProd = edge1.crs(edge2); // Cross product between edge1 and edge2        Vector3 normal = crsProd.nor(); // Normalization of the vector        return normal;}

将构成三角形的 3 个顶点的值传递给此方法后,我得到了以下结果:

[-0.49, -0.86, 0.0]

Representation of the Triangle Mesh and the Normal Vector (Image)

问题 1:
根据我的阅读,我认为该三角形的计算法线值不正确。我的猜测是法线应该位于垂直于三角形中心的某个位置(X 应该是正值,Z 应该是负值)。

问题 2:
在计算出三角形的每面法线后,三角形的所有顶点是否应该具有相同的每面法线值,如下所示:

verticesArr[v0Idx + 0] = 3;//位置
verticesArr[v0Idx + 1] = 0;//位置
verticesArr[v0Idx + 2] = 0;//位置
verticesArr[v0Idx + 3] = -0.49;//法线X
verticesArr[v0Idx + 4] = -0.86;//正常Y
verticesArr[v0Idx + 5] = 0;//正常Z

verticesArr[v1Idx + 0] = 1.49;//位置
verticesArr[v1Idx + 1] = 0.86;//位置
verticesArr[v1Idx + 2] = 0;//位置
verticesArr[v1Idx + 3] = -0.49;//法线X
verticesArr[v1Idx + 4] = -0.86;//正常Y
verticesArr[v1Idx + 5] = 0;//正常Z

verticesArr[v2Idx + 0] = 3;//位置
verticesArr[v2Idx + 1] = 0;//位置
verticesArr[v2Idx + 2] = -1;//位置
verticesArr[v2Idx + 3] = -0.49;//法线X
verticesArr[v2Idx + 4] = -0.86;//正常Y
verticesArr[v2Idx + 5] = 0;//正常Z

我问第二个问题是因为我看过教程和示例,其中为三角形的每个顶点显示了不同的垂直法 vector (用于计算每个面的法线而不是每个顶点的法线)。

最佳答案

问题 1:法线没有位置。它们是垂直于由三角形的任意两个 vector 的方向组合创建的平面的 vector 的方向。

问题 2:三角形的所有顶点都应该具有相同的法线,因为它们属于同一平面,即三角形的平面。

Normal

如您所见,无论您在三角形上的哪个位置,法 vector 的方向都是相同的。

关于java - 计算一个简单三角形的每面法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389335/

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