OpenGL学习之路(五)
2016-05-23 00:39
302 查看
1 引子
不知不觉我们已经进入到读书笔记(五)了,我们先对前四次读书笔记做一个总结。前四次读书笔记主要是学习了如何使用OpenGL来绘制几何图形(包括二维几何体和三维几何体),并学习了平移、旋转、缩放坐标变换矩阵的理论推导和实践应用。这一次读书笔记,我们一起来学习OpenGL中常用的坐标系以及坐标变换。在OpenGL中有几个坐标系,初学者常常被它们搞得晕头转向:为什么需要这些坐标系?各个坐标系有什么作用?……本文就来学习一下这些OpenGL中常用坐标系。
之后来看看投影矩阵的推导,投影变换矩阵比较特殊,不能通过平移、旋转、缩放变换得到。投影分为简单的正交投影和复杂一些的透视投影,我们都将逐一进行推导。最后展示一下透视投影的显示效果,以供大家参考。
三维图形绘制和二维最大区别就是坐标变换变得更复杂了。在三维中,理解好坐标、坐标系(坐标空间)以及坐标变换之类知识点不是很容易的,楼主也是花了不少时间才大致有所理解。不过呢,如果线性代数、线性变换之类学的比较好的童鞋,理解三维坐标变换应该很简单——他们都是牛人。其实理解了之后,也就是那么回事(先藐视它一下吧!)。好了,废话也不多说了,下面我们正式踏上OpenGL学习之路——第五站。
#include "Camera.h" #include <cmath> #include <iostream> Camera::Camera(void) {} Camera::~Camera(void) {} Matrix4X4 Camera::createProjectMatrix() const { double dHalfHeight = m_dNearClipDistance * std::tan(m_dFOVy * 0.5 * PI / 180); double dHalfWidth = m_dAspectRatio * dHalfHeight; Matrix4X4 matProject; matProject.m[0][0] = m_dNearClipDistance / dHalfWidth; matProject.m[1][1] = m_dNearClipDistance / dHalfHeight; matProject.m[2][2] = -(m_dFarClipDistance + m_dNearClipDistance) / (m_dFarClipDistance - m_dNearClipDistance); matProject.m[2][3] = 2 * m_dFarClipDistance * m_dNearClipDistance / (m_dFarClipDistance - m_dNearClipDistance); matProject.m[3][2] = -1.0; matProject.m[3][3] = 0; return matProject; } void Camera::setFarClipDistance( double dFarClipDistance ) { m_dFarClipDistance = dFarClipDistance; } double Camera::getFarClipDistance() const { return m_dFarClipDistance; } void Camera::setNearClipDistance( double dNearClipDistance ) { m_dNearClipDistance = dNearClipDistance; } double Camera::getNearClipDistance() const { return m_dNearClipDistance; } void Camera::setFOVy( double dFOVy ) { m_dFOVy = dFOVy; } double Camera::getFOVy() const { return m_dFOVy; } void Camera::setAspectRatio( double dAspectRatio ) { m_dAspectRatio = dAspectRatio; } double Camera::getAspectRatio() const { return m_dAspectRatio; }
View Code
另外,如果需要源代码的童鞋,也可以自行去百度云盘下载:http://pan.baidu.com/s/1pLVab1L。(读书笔记(五))
4 总结
本文主要是对前几篇博文的总结,同时对投影变换矩阵做了推导,至此,三维坐标矩阵变换部分应该是告一段落了。从下一篇文章开始,我们将介绍3ds文件的载入与显示,当然也会用到矩阵变换的知识,敬请期待!相关文章推荐
- CentOS7安装Tomcat
- CentOs 7.0实现定时任务(定时访问网页)
- tomcat 7出现warning信息WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context}
- Android单元测试<中>(Android官方MVP架构示例项目解析)
- Linux08--Shell程序设计03 shell script
- 短信验证码在网站运营中的重要性
- 每天一个linux命令(11):nl命令
- 每天一个linux命令(12):more命令
- 每天一个linux命令(13):less 命令
- 每天一个linux命令(14):head 命令
- 每天一个linux命令(15):tail 命令
- 每天一个linux命令(16):which命令
- 每天一个linux命令(17):whereis 命令
- 每天一个linux命令(18):locate 命令
- 每天一个linux命令(18):locate 命令
- 每天一个linux命令(19):find 命令概览
- 免费微网站制作教程
- ubuntu下允许root用户ssh远程登录
- mongoose populate
- Linux系统中各目录的作用