各頂点に x、y、z 座標がある頂点のベクトルがあるいくつかの三角形の法線を計算する必要があります。i1、i2、i3 は、三角形の 3 つの頂点のベクトルのインデックスです。
私は<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);
しかし、実際の計算よりも多くのロードとストアがあるように見え、実際にこれを行うより良い方法があるかどうか疑問に思っていましたか? それとも、ロードとストアは「安価な」操作ですか?
すべての三角形に対してこれを実行する必要があり、コードの残りの部分に比べてかなりの時間がかかるため、速度の向上は歓迎されます。