开发者

directx rotation c++

Okay this is a hard question. I'm creating a cube and a pyramid in one vertex array. My problem is to rotate only pyramid vertex not the cube ver开发者_开发知识库tex but I don't know any function that can rotate some vertex. If I try to rotate the vertex I'll get pyramid and cube rotated.


Either

  • put the cube and the pyramid in different vertex arrays and use different transforms to render each array

or

  • apply the rotations in a vertex shader, and pass in some auxiliary per-vertex info which lets the vertex shader decide whether each vertex should be treated as part of the cube or the pyramid (ie apply different transforms in each case). This'd be a bit like using a "blend weight" to do "vertex blending"; except you're only interested in the binary case.


First thought - ensure the vertices for the pyramid and cube occupy separate non-overlapping ranges in the array. When rotating the pyramid vertices, only tell DirectX about that range of the array (use the base pointer and size of the range rather than the full array).

Will now check the DirectX APIs...

EDIT

Confirmed. The key function is...

D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
                                     UINT OutStride,
                                     CONST D3DXVECTOR4* pV,
                                     UINT VStride,
                                     CONST D3DXMATRIX* pM,
                                     UINT n
                                    );

In C++, a subrange of an array is in many ways an array in its own right, or more to the point, it's mostly just a block of memory with no indication within itself of where its bounds are. So you just pass in a different pV and a different n to indicate the subrange you want to apply the transform to, and as far as the function is concerned, that is the whole array. You'll probably need to copy the untransformed part separately - a job for memcpy, I expect.

The stride values are normally just the size of a vector plus any alignment padding, but it's possible to "lie" about this too, and transform e.g. every third vector in the array.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜