在DirectX9中旋转单个对象

时间:2013-12-04 14:41:59

标签: c++ rotation directx directx-9

如何在DirectX9中旋转单个对象?我知道如何旋转所有对象:

static D3DXMATRIX rotation_matrix;

static float X = XX; X += 0.01f;
D3DXMatrixRotationX(&rotation_matrix, X);
d3ddev->SetTransform(D3DTS_WORLD,
                     &rotation_matrix);

这就是我如何旋转所有物体,对吗?但是如何旋转一个物体呢?谢谢。

1 个答案:

答案 0 :(得分:1)

需要知道,您不对对象应用转换。 DirectX甚至不知道“对象”是什么。您始终将变换应用于顶点位置。

通过调用SetTransform()使用DirectX 9的固定功能管道,可以将转换应用于下次绘制调用中绘制的所有顶点。因此,要将其他变换应用于其他顶点,您需要单独的绘制调用(伪代码):

device->SetStreamSource(vertexBuffer1,...); // "object1"
device->SetTransform(transform1);
device->Draw(...); // draw object1

device->SetStreamSource(vertexBuffer2,...); // "object2"
device->SetTransform(transform2); // rotation2
device->Draw(..); // draw object2

注意,whis将按比例增加绘制调用的数量,并对其变换进行编号。划线电话费用昂贵。对于优化的解决方案,请寻找着色器。

希望它有所帮助。 快乐的编码!