一、建立空窗体
新建一个工程,添加引用,并导入名称空间。
加入一个设备对象变量:
private Microsoft.DirectX.Direct3D.Device device = null;
添加初始化图形函数,并在这里面对设备对象进行实例化:
当程序执行时,需要绘制场景,代码在这个函数里:
设置照相机的位置:
现在改变主函数,调用我们写的初始化函数,并显示场景:
运行程序,会显示一个空的窗体。
二、加入地球:
在这一步里需创建一个3D网格对象,来作为要显示的地球,为此,在工程中新加入一个类Earth,此类可以包含所创建的网格对象的信息。
加入一些相关变量,含义见注释:
在构造函数中,把Device设备拷贝到私有成员变量,这样就可以在这个类的其它方法内使用它,另外就是把位置变量进行赋值:
下面这个函数是装入.X文件。
在这个方法内,使用Mesh.FromFile()这个方法,从给定的文件名中找到.X文件,并装入相关数据,一旦数据格式设置完成,可以从此文件中找到材质和贴图信息,并把它存放在数组中,并通过文件路径,得到纹理文件文件的路径,最后返回真值,如果整个过程出现错误,返回假值。
下面这个Render()方法,是把此对象,即地球显示在设备对象上,此方法较简单,通过变形操作来得到网格对象的X,Y,Z坐标,接着设置网格对象的材质和纹理,最后,将每个材质和纹理应用到每个网格。
现在回到窗体代码中,添加引用网格对象的相关变量:
在图形初始化函数中,需要对网格对象进行初始化。加入下面的代码:
代码第一句把网格对象的位置定为原点,接着偏移X轴2个单位,接下来从文件中得到此.X文件。如果成功设置,meshLoaded置为真。注意,这里有一个.X文件,在源代码中有此文件。
在设置相机的函数中,加入一盏灯光:
此灯光较简单,仅为一个直射型白光灯。
最后,在Render()方法中,调用网格对象的Render()方法,以显示地球。
|