图解VC#版DirectX开发教程二 - 摄像机

    用VC#进行DirectX开发,程序结构大体都是一样的。

    上一篇博文,VC#版DirectX开发入门详解

http://blog.csdn.net/bcbobo21cn/article/details/44890937

其程序结构如下图:

 

   此次摄像机的例子程序结构如下图:

    程序的结构都是:定义绘图设备,一个窗体构造函数,一个Main()函数,一个初始化D3D函数,一个Render()函数;

    主要绘制工作在Render()中进行。

 

下面做摄像机的例子。

 

摄像机基础
    三个概念:世界空间(world  space)、摄像机空间(camera space)和模型空间(model  space) 。世界空间(world  space)可以认为是客观世界空间,所有对象都位于这个世界空间中。摄像机空间(camera  space)用于展示显示区域,类似于人的眼睛。模型空间(model space)为模型自身的空间坐标系,如导入某个模型之前在建模时就具有的空间。
    再三个概念: View  Transformation 、 World  Transformation 和 Projection Transformation。View Transformation(视图变换)是表示观察者位于世界空间,也称摄像机变换,把顶点转换成摄像机空间中的点。World Transformation (世界变换)是用于从模型空间转换坐标到世界坐标。Projection  Transformation(投影变换)可以认为是用来控制摄像机的,类似于设置摄像机镜头, 这也是这三种变换形式中最复杂的。 其中定义视图变换和投影变换是模拟摄像机必须的, 若不指定世界矩阵, 默认情况下它为一个四阶单位矩阵。三维空间中的坐标,经过世界变换、视图变换(摄像机变换)、投影变换和屏幕转换,才得到
二维屏幕上的坐标。

创建视图矩阵:

float eyez=-20;

......

Vector3 eye = new Vector3(20, 0, eyez);
Vector3 at = new Vector3(0, 0, 0);
Vector3 up = new Vector3(0, 1, 0);

Matrix viewMatrix = Matrix.LookAtLH(eye, at, up);

 

建立投影矩阵:

Matrix projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 50.0f);

 

进行如下设置建立摄像机:

device.Transform.Projection = projection;
device.Transform.View = viewMatrix;

 

绘制三角形有线框模式和填充模式,

//device.RenderState.FillMode = FillMode.WireFrame;//线框模式
            device.RenderState.FillMode = FillMode.Solid;//填充模式
            device.RenderState.Lighting = false;  //先不考虑灯光

 

不同的绘制模式其运行结结果分别如下图:

图解VC#版DirectX开发教程二 - 摄像机_第1张图片

 

图解VC#版DirectX开发教程二 - 摄像机_第2张图片

 

下面通过改变摄像机Z坐标来看一下改变此值的效果;

Vector3结构描述并操作三维 (3-D) 空间中的向量;

现在图形在屏幕上,摄像机Z坐标其实就是眼睛离屏幕的远近;

 

添加两个按钮,并加入如下代码:

private void button1_Click(object sender, EventArgs e)
        {
            eyez = eyez - 5;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            eyez = eyez + 5;
        }

 

当单击第一个按钮,Z坐标减小,所绘三角形会越来越小;单击第二个按钮则增大;如下图;

图解VC#版DirectX开发教程二 - 摄像机_第3张图片

 

源码下载:

http://pan.baidu.com/s/1dDrQTxf

 

你可能感兴趣的:(C#,三维,DirectX,Direct3D)