gpt4 book ai didi

algorithm - 使用法线沿二维平面置换 3D 顶点

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:49 29 4
gpt4 key购买 nike

我有一个三角形,其任意顶点位于 3D 空间中。

我知道通过以下操作很容易找到这种三角形的质心:

float centroid[3] = { 0, 0, 0 };

for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
centroid[i] += points[j][i];
}
centroid[i] /= 3.0;
}

平面方程也很容易找到它的法线:

crossProduct(points[1] - points[0], points[2] - points[0]);

有一种非常简单的方法可以将顶点从质心移开远离,但是那太线性了。我只能来回移动指针。

我需要什么公式才能在从三角形法线的角度形成的伪 X/Y 轴上自由移动顶点?

作为引用,我对向量和矩阵使用了 C++QT。我正在使用基本的 OpenGL 进行渲染。

最佳答案

要在三角形平面中构建坐标轴,您可以使用从质心到任何顶点的轴 pseudoX 和垂直轴 pseudoY = pseudoX.cross.Normal

选择顶点作为基础向量似乎很自然。如果您想添加一些随机性,请将此 pseudoX 旋转任意角度并再次生成新的 pseudoY 作为叉积。

在该平面中生成矢量的另一种方法 - 仅从法线。选择量值最大的法线分量,将其取反并与量值第二的分量交换,使最小的分量为零。例如,如果

 |ny|>=|nz|>=|nx|
Vec = (0, nz, -ny)

注意 Vec.dot.Normal = 0,所以 Vec 位于三角形平面内

关于algorithm - 使用法线沿二维平面置换 3D 顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411740/

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