d3d 画旋转方棱椎与六面体

 

 

 

 

 

 

需要注意的地方:

将多边形切割成三角形时,要按照逆时针方向一次编号,避免混乱。

全屏时如果使用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 );先注释掉就知道怎么回事了,说的比较啰嗦,好久没写博客了,希望看到我博客的朋友能看明白,顺便留个脚印,看帖记得回帖。

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值