我需要计算一些三角形的法线,其中我有一个顶点向量,其中每个顶点都有 x、y、z 坐标。i1, i2, i3 是三角形三个顶点向量中的索引。
我正在使用<DirectXMath.h>
并编写了这个似乎有效的方法。
XMFLOAT3 normal;
///
XMVECTOR v1 = XMLoadFloat3(&XMFLOAT3(verts[i1].x, verts[i1].y, verts[i1].z));
XMVECTOR v2 = XMLoadFloat3(&XMFLOAT3(verts[i2].x, verts[i2].y, verts[i2].z));
XMVECTOR v3 = XMLoadFloat3(&XMFLOAT3(verts[i3].x, verts[i3].y, verts[i3].z));
XMVECTOR n = XMVector3Cross(XMVectorSubtract(v2 ,v1), XMVectorSubtract(v3 ,v1));
XMStoreFloat3(&normal, n);
然而,它似乎有比实际计算更多的加载和存储,并且想知道是否有更好的方法来实际执行此操作?还是加载和存储“廉价”操作?
我必须为每个三角形运行它,并且相对于我的其余代码需要大量时间,因此欢迎提高速度。