使用DirectXMath有效地计算法线

时间:2012-11-16 13:25:32

标签: directx-11 xna-math-library

我需要计算一些三角形的法线,其中我有一个顶点矢量,其中每个顶点都有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);

然而,它似乎比实际计算有更多的载荷和商店,并且想知道是否有更好的方法来实际执行此操作?或者负载和存储“廉价”操作?

我必须为每个三角形执行此操作,并且相对于我的其余代码需要花费大量时间,因此欢迎提高速度。

1 个答案:

答案 0 :(得分:2)

尝试在#define _XM_NO_INTRINSICS_之前添加#include <DirectXMath.h>。这将禁止在库中使用SSE,从而允许编译器更自由地进行自己的优化。