我们之前用顶点缓冲区绘制图形时,在灵活顶点格式结构体struct CUSTOMVERTEX中的三维坐标是“未经转化的”即直接绘制成要显示的2D效果,即rhw(对3D绘制的学习之前,先绘制2D的,绘制2D的时,加上rhw,之前绘制的图形就是这种。其实这里不太明白···)
先来认识3D中的几个空间:
本地空间:模型空间,定义组成物体的三角形列表时所使用的坐标系统。不需要考虑物体的位置大小与其他物体的关系等,简化模型处理工作上很有用。
世界空间:把模型组合到一起,形成一个场景,并使用统一的坐标系,即世界空间。主要是物体之间的位置关系。
视图空间:我们所看到的空间,需要在场景中放一个虚拟摄像机,决定我们能看到的场景,如我们只能看到一个三维物体的正面,而背着镜头的一面我们是看不到的。
视口:我们前面所绘制的窗口,在游戏中,通常是整个屏幕。
因此,在我们在本地绘制好后,需要转换到相应的世界空间,并通过摄像头来查看。我们将此过程封装到一个专门的方法SetupMyWorld中,该方法中主要是设置空间的转换
1、设置旋转轴,旋转角度:世界转换
2、设置摄像机位置:视图矩阵
3、视图投影变换
每一步中都有对应的 定义——>初始化——>设置 三个步骤
开始绘制一个真正的3D图形吧~~~
1、修改结构体和宏,都去掉rhw的定义,并将对应顶点中的rhw定义删除,可将结构体和宏放到Render方法外部,以后可能要定义纹理等时用到。
2、实现转换SetupMyWorld()
3、执行SetupMyWorld(),应该在Render()方法的开头就执行
4、另外,需要在初始化d3d设备中去设置裁剪模式和灯光模式
5、也可以设置让图片旋转,改变裁剪模式等去深入理解。
效果图:正在绕对角线旋转