需要注意的地方:
将多边形切割成三角形时,要按照逆时针方向一次编号,避免混乱。
全屏时如果使用HRESULT GetAdapterDisplayMode(
UINT Adapter,
D3DDISPLAYMODE *pMode
);函数去获取显示器设备信息时,可以使用
typedef struct _D3DDISPLAYMODE {
UINT Width;
UINT Height;
UINT RefreshRate;
D3DFORMAT Format;
} D3DDISPLAYMODE;
UINT Width;
UINT Height;
作为D3DPRESENT_PARAMETERS 缓冲区的宽与高。
使用D3DFORMAT Format作为D3DPRESENT_PARAMETERS 缓冲区的格式。
这个程序运行时会发现一个问题,当全屏是旋转速度慢,小盘时旋转快。这是什么原因呢?
当全屏时分辨率高, cpu需要渲染的区域增加,所以render 一次时间变长,即速率变慢。
而分辨率低时,cpu渲染的区域减少,render一次时间变短,即速率变快。
所以在真正的游戏设计中都是采用定时器来按时渲染。我这上面的例子仅仅是用来学习看看效果。
还有个问题可能大家不容易理解,为什么只需要旋转世界坐标,就可以使得物体旋转起来呢?
这个问题是这样,当世界坐标矩阵乘上一个角度,哎,没办法没法输入数学表达式,不能输入符号。
世界坐标乘上一个旋转矩阵时变成另外一个矩阵 Pword, 接下来我们看到了设置 观察矩阵
//É趨Ïà»ú'camera'
p_D3DDevice->SetTransform(D3DTS_VIEW,&view_matrix);
此时Pword 会与观察矩阵相乘,也即照相机的位置发生了旋转。也就是说我们的眼睛看到了物体的另外一个地方,我这样讲不知道看我博客的朋友是否能明白。然后还有一步设置投影矩阵
D3DXMatrixPerspectiveFovLH(&matProj, //½á¹û¾ØÕó
D3DX_PI/4,//¿ÉÊÓ»¡¶È·¶Î§
((float)sw / (float)sh), //ÆÁÄ»¸ß¿í±È
1.0f, //½Ó½ü¹Û²âÃæ
100.0f ); //Ô¶Àë¹Û²âÃæ
//͸ÊÓ¾ØÕó²»×ö¸Ä±ä
p_D3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );
这个步骤等于我们的眼睛看到了物体,等于物体投影到照相机上,等于物体投影投影到了我们眼睛上。
可以尝试把p_D3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );先注释掉就知道怎么回事了,说的比较啰嗦,好久没写博客了,希望看到我博客的朋友能看明白,顺便留个脚印,看帖记得回帖。
2037

被折叠的 条评论
为什么被折叠?



