用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. 用Python构建网页抓取器
  2. Linux下Postfix的配置和使用
  3. Go基础知识学习(6) 接口
  4. 导出excel--多个sheet
  5. Django REST framework 开始
  6. 全国一等奖,他的学习之路。
  7. html设置边框dw,Dreamweaver表格边框设置的css语法大全
  8. Unity3D 学习教程 14 C# 旋转镜头
  9. go 输入输出流(bufio)
  10. mongodb 字符串转bson_MongoDB之bson的介绍
  11. leetcode(120)三角形最小路径之和
  12. JMeter压力测试步骤
  13. 【2017百度之星资格赛】1004.度度熊的午饭时光思路及代码
  14. 在vue2项目中使用腾讯云IM及常见问题
  15. Bzoj2959: 长跑
  16. mysql数据库用sql进行增删改操作
  17. 数据科学家VS大数据专家VS数据分析师:有什么不同?
  18. 4、(四)外汇学习基础篇之银行间外汇远期交易
  19. ONF推出第二版Atrium 获OpenDaylight支持
  20. 2021年的谷歌排名优化怎么做,69个重点告诉你

热门文章

  1. webpack 的基本使用——配置打包的入口与出口||配置 webpack 的自动打包功能
  2. Java 技术篇-使用IDEA开发java代码实例演示,IntelliJ IDEA的安装与使用
  3. PyQt5 技术篇-scrollArea不显示滚动条解决方法,Qt Designer不显示滚动条,滚动条的显示和隐藏
  4. CTFshow 命令执行 web56
  5. 第三周实践项目8 以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。
  6. 利用神经网络 遗传算法求得函数极小极大值
  7. 数据结构期末考试题目---笔记(SYSU)
  8. ztree 拖动树结构的移动组件样式不见了怎么办?
  9. mysql执行出错:Table 'k_user' is read only
  10. Linux Restart PHP