使用作为directX一部分的D3DX库,特别是本例中的directx9,我想知道对输入和输出使用相同的矩阵(或向量等)是否安全
D3DXMATRIX mat;
D3DXMatrixInverse(&mat, NULL, &mat);我一直在避免这样做,假设当计算结果时,数组的某些部分被部分覆盖时,会导致不好的事情发生,但我看到很多代码都是这样做的。
一个简单的测试表明它似乎工作正常,所以我假设D3DX函数在必要的地方复制输入数据,或者其他一些方法来确保它工作正常,但是我在任何地方都找不到它的文档,所以我不愿意依赖它工作。
有没有关于使用这样的函数的官方声明?
发布于 2010-03-25 00:26:33
是的,是这样的。来自msdn
与传入和传出的参数一样,每个函数都可以接受相同的对象
发布于 2010-03-24 22:49:24
我很确定答案是肯定的。然而,我找不到任何地方可以肯定地说...
编辑:浏览一下D3DX9Math.inl,看起来你已经小心了,以确保你能做到。例如,如果我们查看D3DXVec3Cross的代码:
D3DXINLINE D3DXVECTOR3* D3DXVec3Cross
( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 )
{
D3DXVECTOR3 v;
#ifdef D3DX_DEBUG
if(!pOut || !pV1 || !pV2)
return NULL;
#endif
v.x = pV1->y * pV2->z - pV1->z * pV2->y;
v.y = pV1->z * pV2->x - pV1->x * pV2->z;
v.z = pV1->x * pV2->y - pV1->y * pV2->x;
*pOut = v;
return pOut;
}您可以看到,它将叉积转换为临时的,然后在最后一步中,将其复制到返回中。如果能在某个地方明确说明这一点,那就太好了。
https://stackoverflow.com/questions/2506824
复制相似问题