C#+Direct3D9.0开发实例之月亮绕着地球转
http://tech.ddvip.com 2006年08月02日 社区交流
本文详细介绍C#+Direct3D9.0开发实例之月亮绕着地球转
在设置相机的函数中,加入一盏灯光:
device.Lights[0].Type = LightType.Directional;
device.Lights[0].Diffuse = Color.White;
device.Lights[0].Direction = new Vector3(0, -1, -1);
device.Lights[0].Update();
device.Lights[0].Enabled = true;
此灯光较简单,仅为一个直射型白光灯。
最后,在Render()方法中,调用网格对象的Render()方法,以显示地球。

三、使地球旋转
前面用一个网格对象来建立地球,但此类没有平移,旋转及缩放等方法,下面就加入这些方法,因为这些方法具有通用性,因此可以新建一个类,把这些方法写在这些类中,使地球对象成为它的派生类。
在工程中新添加一个类:BaseEarth;
加入进行平移、旋转、缩放的变量:
private float xloc = 0.0f;
private float yloc = 0.0f;
private float zloc = 0.0f;
private float xrot = 0.0f;
private float yrot = 0.0f;
private float zrot = 0.0f;
private float xscale = 1.0f;
private float yscale = 1.0f;
private float zscale = 1.0f;
加入相应的属性代码:
public float XLoc
{
get
{
return xloc;
}
set
{
xloc = value;
}
}
…………
在Render()虚函数中,应用平移、旋转及缩放。
public virtual void Render()
{
objdevice.MultiplyTransform(TransformType.World,Matrix.Translation(xloc, yloc, zloc));
objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(1.0f, 0.0f, 0.0f), xrot));
objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 1.0f, 0.0f), yrot));
objdevice.MultiplyTransform(TransformType.World,Matrix.RotationAxis(new Vector3(0.0f, 0.0f, 1.0f), zrot));
objdevice.MultiplyTransform(TransformType.World,Matrix.Scaling(xscale, yscale, zscale));
return;
}
作者:dandanCool 责编:豆豆技术应用