我有一个三角形,在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 渲染。
答案 0 :(得分:1)
要在三角形平面中构建坐标轴,可以使用从重心到任意顶点的轴pseudoX
和垂直轴pseudoY = pseudoX.cross.Normal
。
选择顶点作为基本向量似乎很自然。如果要增加一些随机性,请将此pseudoX
旋转任意角度,然后再次生成新的pseudoY
作为叉积。
另一种在平面上生成矢量的方法-仅从法线开始。选择幅度最大的正态分量,将其取反并与第二幅度的分量交换,使最小的分量为零。例如,如果
|ny|>=|nz|>=|nx|
Vec = (0, nz, -ny)
请注意Vec.dot.Normal = 0
,所以Vec
位于三角形平面