读书人

DirectX 点列表绘制不能旋转?解决办

发布时间: 2012-06-04 14:48:03 作者: rapoo

DirectX 点列表绘制,不能旋转?
//-----------------------------------------
// Desc: 顶点结构
//-----------------------------------------
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

CUSTOMVERTEX vertices[307200];
。。。。

device->SetTransform(D3DTS_WORLD, (D3DMATRIX *) &g_object_matrix);
device->DrawPrimitive( D3DPT_POINTLIST, 0, 480*640 );

并且设置了顶点缓冲区,绘制成功,但是在绘制前设置世界坐标系不起作用,点阵列没有旋转,为什么呢?

[解决办法]
那要看你的g_object_matrix是否是计算后的世界坐标系。
比如要旋转 Y 轴,你可以这样写:

C/C++ code
        static float y = 0.0f;        D3DXMATRIX yRot;        D3DXMatrixRotationY(&yRot, y);        y += timeDelta*0.5f;        if( y >= D3DX_PI * 2.0f )            y = 0.0f;        D3DXMATRIX g_object_matrix = yRot;        Device->SetTransform(D3DTS_WORLD, &g_object_matrix);
[解决办法]
断点调试,确定在device->SetTransform(D3DTS_WORLD, (D3DMATRIX *) &yRot)这句代码里面,yRot的值在每帧绘制的时候都在改变吗,然后再写句代码看看观察坐标系是不是同时也在发生变化?

另外建议楼主这种问题的帖子发到游戏开发专区去,会有更多的人解答的~
[解决办法]
楼主把 点阵 的显示方式改成 三角形 试试,可能是 点阵 的旋转看不出来效果。
而且,楼主这里 y += 0.01*0.5f; 把数值改大点,这样便于观察。

读书人网 >C++

热点推荐