用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;  //先不考虑灯光

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

下面通过改变摄像机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坐标减小,所绘三角形会越来越小;单击第二个按钮则增大;如下图;

源码下载:

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

图解VC#版DirectX开发教程二 - 摄像机相关推荐

  1. VC#版DirectX开发入门详解

    一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...

  2. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

  3. MIP开发教程(二) 使用MIP-CLI工具调试MIP网页

    初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip i ...

  4. 空间素材代码_C++大神解读视频捕获程序,VC++基于Directx开发的源代码

    一款小巧的视频捕获程序,VC++6.0基于Directx开发的源代码,编译时需要Directx相关类库文件, 窗口表单编写的简单视频捕捉应用程序.这个工程既演示了窗口表单应用程序的创建,又演示了 Op ...

  5. 微信公众号开发教程(二)消息接收与响应处理

    作者:陈惠,叩丁狼教育高级讲师.原创文章,转载请注明出处. 上一篇文章我们已经实现了URL接入,接下来就可以利用微信官方的开发文档来实现不同的案例.(注意:若还没有进行接入操作,请参考开发教程(一)) ...

  6. ODOO13 开发教程二 Windows开发环境搭建

    这篇文章写给刚接触odoo开发的朋友,在这篇文章中,主要介绍Windows下,odoo开发环境的搭建方法. 本文的推荐开发环境搭建使用 PyCharm.Python3.7.odoo13社区版 Wind ...

  7. Android简明开发教程二十一:访问Internet 绘制在线地图

    在例子Android简明开发教程十七:Dialog 显示图像 中我们留了一个例子DrawMap()没有实现,这个例子显示在线地图,目前大部分地图服务器都是将地图以图片存储以提高响应速度. 一般大小为2 ...

  8. 【离线语音专题④】安信可VC离线语音开发板二次开发语音控制LED灯

    系列文章目录 [离线语音专题①]安信可最新离线语音模组VC系列出厂固件使用教程--SDK开源? [离线语音专题②]安信可语音开放平台的使用--VC系列SDK的获取 [离线语音专题③]安信可VC系列离线 ...

  9. Symbian系统开发教程(二)

    第二章:数据类型与语法 作者:谢兴   enigma19971@hotmail.com             转载需注明出处      下载word版本         Symbian系统已经提供了 ...

最新文章

  1. java 闭包与回调
  2. APM - Javassist 入门 生成一个简单类
  3. python保存到txt_python 如何将数据写入本地txt文本文件的实现方法
  4. RMAN SET NEWNAME
  5. android studio 反编译修改versioncode,在android studio 中修改versioncode 跟versionname(示例代码)...
  6. Redis灵魂14问?真香
  7. libevent源码深度剖析一
  8. Camera2点击对焦实现
  9. 医疗大数据的风险及应对方法
  10. Fiddler抓包工具的安装与使用方法
  11. DB2 表字段值变更记录
  12. 工具说明书 - 单词发音及根据发音查单词
  13. 社会工程学:关于一些信息收集的网站
  14. SWI-Prolog的下载与使用
  15. 为什么很多企业使用TOM邮箱收发内部邮件?
  16. Java 应用结构规范
  17. 弦理论能成为新的万物理论吗?
  18. 兔年首文迎新春-Cesium橘子洲烟花礼赞
  19. CoAP协议之初探(一)
  20. 独立后台带分销功能月老办事处交友盲盒微信小程序源码新版,更好的裂变推广引流

热门文章

  1. Create a method for inserting accounts.
  2. Regex解析字符串
  3. Excel 技术篇-解决“单元格不能自动适应大小“问题
  4. KEIL编译stdarg处理机制遇到incorrect use之类的问题
  5. 单片机\程序中的那些宏定义
  6. 画动态分析图的个人小技巧
  7. [YTU]_2919( Shape系列-5)
  8. 【量化投资】策略九(聚宽)
  9. 【解决方案】OpenCV配置【Win10+VS2017】(本人于2018年3月30日完成)
  10. java exec 空格_java exec 空格及特殊符号处理的解决方案