我们拿太阳系为模型,主要实现太阳自转、地球自转、地球公转、月球自转、月球公转效果。由于现
在还没有说到模型的绘制,我们现在暂时用正方体来代表三个星球。
先来看一下,在Direct3D中是如何生成平移、旋转、缩放矩阵的。()
1、生成平移矩阵:
1 D3DXMATRIX* WINAPI D3DXMatrixTranslation 2 ( D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z ); |
pOUt是最终生成的平移矩阵指针,x、y、z分别表示各方向上的移动量。
2、生成旋转矩阵:
|
pOut为生成的缩放矩阵指针,sx、sy、sz分别为在三个坐标轴上的缩放系数。同设置不同的缩放系
数可以实现一些特殊效果。
将要实现的简单太阳系就是通过这一系列的有序组合实现的。我们分别为太阳、地球、月球进行设置。
设置太阳:
|
10 g_pDevice->SetTransform(D3DTS_WORLD, &matWorld); |
在此方法中首先进行了世界变换,也就是我们的太阳自转操作,然后是观察、投影的变换。在声明一
个矩阵后,调用函数D3DXMatrixIdentity在将矩阵转换为单位矩阵(矩阵左上角到右下角这条对角线上
的值为1,其他值为0 的矩阵)以防止意外操作产生的不利影响。在世界变换中实现太阳的自转此处设置y |
位置指针,pAt为观察的点的指针,pUp为眼睛摆放的向上方向指针。
1 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH 2 ( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf ); |
此方法生成投影变换矩阵(此处为左手坐标系),pOut为生成的投影变换矩阵指针,fovy为在y轴
方向看到的最大范围(弧度),Aspect为视区宽度与高度的比例,zn为近裁剪面的z值,zf为远裁剪面
的z值,这样就形成一个近小远大的台体,我们所看到的一切就都在这个台体中。
设置地球:
|
设置月球: |
22 D3DXMatrixRotationY(&matRot0, 2*D3DX_PI*(timeGetTime()%1000)/1000); 23 //相对地球,平移到绕地球轨道 |
对地球和月球的设置,主要注意各种矩阵变换的顺序,在这里,矩阵变换的组合操作由矩阵相乘得到,
操作的顺序由左向右,需要清楚的一点事,矩阵相乘不支持交换律。当然也可以使用函数
D3DXMatrixMultiply数做乘法运算,原型如下:
|
在绘制图形的时候,要先执行变换操作,再进行绘制。
运行程序,我们将看到如图效果:
本文仅供参考,如有不足,还望赐教,大家共同学习进步。好,到这里,简单的太阳系就做好了。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务