图解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; //先不考虑灯光
不同的绘制模式其运行结结果分别如下图:
下面通过改变摄像机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开发教程二 - 摄像机相关推荐
- VC#版DirectX开发入门详解
一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11 ...
- 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...
- MIP开发教程(二) 使用MIP-CLI工具调试MIP网页
初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip i ...
- 空间素材代码_C++大神解读视频捕获程序,VC++基于Directx开发的源代码
一款小巧的视频捕获程序,VC++6.0基于Directx开发的源代码,编译时需要Directx相关类库文件, 窗口表单编写的简单视频捕捉应用程序.这个工程既演示了窗口表单应用程序的创建,又演示了 Op ...
- 微信公众号开发教程(二)消息接收与响应处理
作者:陈惠,叩丁狼教育高级讲师.原创文章,转载请注明出处. 上一篇文章我们已经实现了URL接入,接下来就可以利用微信官方的开发文档来实现不同的案例.(注意:若还没有进行接入操作,请参考开发教程(一)) ...
- ODOO13 开发教程二 Windows开发环境搭建
这篇文章写给刚接触odoo开发的朋友,在这篇文章中,主要介绍Windows下,odoo开发环境的搭建方法. 本文的推荐开发环境搭建使用 PyCharm.Python3.7.odoo13社区版 Wind ...
- Android简明开发教程二十一:访问Internet 绘制在线地图
在例子Android简明开发教程十七:Dialog 显示图像 中我们留了一个例子DrawMap()没有实现,这个例子显示在线地图,目前大部分地图服务器都是将地图以图片存储以提高响应速度. 一般大小为2 ...
- 【离线语音专题④】安信可VC离线语音开发板二次开发语音控制LED灯
系列文章目录 [离线语音专题①]安信可最新离线语音模组VC系列出厂固件使用教程--SDK开源? [离线语音专题②]安信可语音开放平台的使用--VC系列SDK的获取 [离线语音专题③]安信可VC系列离线 ...
- Symbian系统开发教程(二)
第二章:数据类型与语法 作者:谢兴 enigma19971@hotmail.com 转载需注明出处 下载word版本 Symbian系统已经提供了 ...
最新文章
- 用Python构建网页抓取器
- Linux下Postfix的配置和使用
- Go基础知识学习(6) 接口
- 导出excel--多个sheet
- Django REST framework 开始
- 全国一等奖,他的学习之路。
- html设置边框dw,Dreamweaver表格边框设置的css语法大全
- Unity3D 学习教程 14 C# 旋转镜头
- go 输入输出流(bufio)
- mongodb 字符串转bson_MongoDB之bson的介绍
- leetcode(120)三角形最小路径之和
- JMeter压力测试步骤
- 【2017百度之星资格赛】1004.度度熊的午饭时光思路及代码
- 在vue2项目中使用腾讯云IM及常见问题
- Bzoj2959: 长跑
- mysql数据库用sql进行增删改操作
- 数据科学家VS大数据专家VS数据分析师:有什么不同?
- 4、(四)外汇学习基础篇之银行间外汇远期交易
- ONF推出第二版Atrium 获OpenDaylight支持
- 2021年的谷歌排名优化怎么做,69个重点告诉你
热门文章
- webpack 的基本使用——配置打包的入口与出口||配置 webpack 的自动打包功能
- Java 技术篇-使用IDEA开发java代码实例演示,IntelliJ IDEA的安装与使用
- PyQt5 技术篇-scrollArea不显示滚动条解决方法,Qt Designer不显示滚动条,滚动条的显示和隐藏
- CTFshow 命令执行 web56
- 第三周实践项目8 以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面。
- 利用神经网络 遗传算法求得函数极小极大值
- 数据结构期末考试题目---笔记(SYSU)
- ztree 拖动树结构的移动组件样式不见了怎么办?
- mysql执行出错:Table 'k_user' is read only
- Linux Restart PHP