《OpenGL编程指南第7版》3视图
一、概念
- 视图变换:设置相机位置和方向
- 模型变换:设置模型位置和方向
- 投影变换:透视投影和正投影。透视投影:近大远小;正投影:直接映射。
- 视口变换:设置如何映射到窗口屏幕
二、内容
2.1 模型变换
- glTranslate:平移
- glRotate:渲染
- glScale:缩放
2.2 视图变换:
gluLookAt(观察点位置,瞄准参考点,朝上方向);
2.3 透视投影:
创建视景体:
- glFrustum(左,右,底,高,近,远)无需特殊对称
- gluPerspective(上下角度,宽高比,近,远)对称于x,y轴
2.4正投影:
glOrtho(左,右,底,高,近,远)
2.5 视口变换:
glViewport(x,y,width,height)
三、矩阵堆栈
每一次对矩阵执行的操作时,实际操作的都是最顶部的那个矩阵。
- glPushMatrix:复制最顶部矩阵压入堆栈中;
- glPopMatrix:抛弃销毁堆栈顶部的矩阵
介于glPushMatrix和glPopMatrix之间的矩阵运算相对是独立的,相互不影响。
四、逆变换
屏幕坐标转换为三维空间坐标
gluUnproject(winX,winY,winZ,modelMatrix[16],projMatrix[16],viewPort[4],*objX,*objY,*objZ)
| objX | | 2(winX - view[0]) / view[2] - 1 |
| objY | = INV(PM) | 2(winY - view[1]) / view[3] - 1 |
| objZ | | 2(winZ) - 1|
| W | | 1|
五、OpenGL ES 2.0 中的矩阵
http://blog.csdn.net/kesalin/article/details/7168967
矩阵运算规则:
1) 若矩阵 A 和 B 不是互逆矩阵,则不满足乘法交换律,即 A × B 不等于 B × A;
2) M × N 阶的矩阵只能和 N × O 阶的矩阵相乘,即 N 的阶数相等,结果为 M × O 阶的矩阵;
3) 矩阵 A × B 的运算过程是 A 的每一行依次乘以 B 的每一列作为结果矩阵中的一行;
4) 矩阵 A 的逆矩阵 B 满足 A × B = B × A = 单位矩阵。
5) 单位矩阵是对角线上的值为1,其余均为 0 的矩阵。单位矩阵不影响坐标变换(你可以将下面的3D变换矩阵换成单位矩阵来思考下)。
3D空间的物体投影到2D平面上时,就需要使用到齐次坐标,因此我们需要使用 4 × 4 的 Matrix 来表示变换。在编程语言中,这样的 Matrix 可用大小为 16 的一维数组或4 × 4 的二维数组来表示。由于矩阵乘法不满足乘法交换律,用数组表示 Matrix 又分为两种形式:行主序和列主序,它们在本质上是等价的,只不过是一个是右乘(行主序,矩阵放右边)和一个是左乘(列主序,矩阵放左边)。OpenGL 使用列主序矩阵,即列矩阵,因此我们总是倒过来算的(左乘矩阵,变换效果是按从右向左的顺序进行): 投影矩阵 × 视图矩阵 × 模型矩阵 × 3D位置。
4× 4列矩阵的数组表示:数字表示数组下标对应的行列位置:
那么
平移矩阵可表示为:
平移矩阵 × 列矩阵(a, b, c, 1) = 列矩阵(a + x, b + y, c + z, 1)。
缩放矩阵可表示为:
缩放矩阵 × 列矩阵(a, b, c, 1) = 列矩阵(a × sx, b × sy, c × sz, 1)。
绕 X 轴旋转的旋转矩阵可表示为:
绕 X 轴旋转的旋转矩阵 × 列矩阵(a, b, c, 1) = 列矩阵(a, b × cos(θ) - c × sin(θ), b × -sin(θ) + c × cos(θ), 1)。
绕 Y 轴旋转的旋转矩阵可表示为:
绕 Y 轴旋转的旋转矩阵 × 列矩阵(a, b, c, 1) = 列矩阵(a × cos(θ) - c × sin(θ), b , a × -sin(θ) + c × cos(θ), 1)。
绕 Z 轴旋转的旋转矩阵可表示为:
绕 Z 轴旋转的旋转矩阵 × 列矩阵(a, b, c, 1) = 列矩阵(a × cos(θ) - b × sin(θ), a × -sin(θ) + b × cos(θ), c, 1)。
《OpenGL编程指南第7版》3视图相关推荐
- OpenGL编程指南(第八版)第一个渲染三角形案例代码在win8双显卡电脑VS2015中运行方法总结
弄了好几天才把第一个程序运行出来,用该博客记录一下参考的博客资料及问题: 写得很好的博客参考资料为: http://blog.csdn.net/IceTeaSet/article/details/50 ...
- opengl编程指南第8版源码编译详细说明
1. 到:https://github.com/openglredbook/examples 下载完全版的源码examples-master.zip,大小有131MB左右,不要下载缩略版的,否则\bi ...
- opengl编程指南第8版 环境搭建及原理
转载:http://www.cnblogs.com/gagugagu/p/5211452.html OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统 ...
- OpenGl编程指南例2.4大白话分析
OpenGl编程指南例2.4分析 即上一篇文章搭建了opengl的环境后,继续学习Opengl,被第二章的各种gen,bind,buffer搞得晕头转向,在还没有消化完全的时候,又被一计重击打到--为 ...
- OpenGL编程指南7:视图-
1.前言 计算机图形学的要点就是创建三维物体的二维图像(图像必须是二维的,因为他是在平面的屏幕上显示的).但是,当我们决定怎样在屏幕上绘图时,必须使用三维坐标的方式考虑. 为了把一个物体的三维坐标变成 ...
- 《OpenGL编程指南(原书第8版)》——计算着色器
原文 http://www.csdn.net/article/2014-11-21/2822754 主题 OpenGL 数学 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊 ...
- OpenGL深入探索——《OpenGL编程指南(原书第8版)》——计算着色器
转载自 <OpenGL编程指南(原书第8版)>--计算着色器 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊人的器件.过去,这种处理器主要被设计用于承担实时图形渲 ...
- 《OpenGL编程指南》一第2章 着色器基础
本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...
- OpenGL编程指南5:学习绘制不同风格的曲线
1.不同风格曲线绘制 #include <vgl.h> //宏定义;当定义的宏不能用一行表达完整时,可以用"\"表示下一行继续 #define drawOneLine( ...
- OpenGL编程指南4:双缓冲实现运行
1.前言 绘制一个旋转的方块,主要为了说明glutSwapBuffers()函数的用法. 同时也为了学习如何使用GLUT控制输入设备,并打开或关闭空闲处理函数. 2.OpenGL编程及程序剖析 /** ...
最新文章
- Android 清单文件 详解
- 平台资源表 表和表字段的命名规范——JEPLUS软件快速开发平台
- Linq之select子句
- java 回调模式_总结!!!总结!!!java回调以及future模式
- Spring boot切换Servlet容器
- 知乎真的一天不如一天了吗?
- php 中session与cookies的区别,php中session和cookie的区别
- Xavier上的第一个I2C驱动
- (30)VHDL实现比较器(有符号)
- ArcMap导入图层出现General function failure问题 [转]
- Tensorflow学习之 卷积神经网络 (一)什么是卷积?
- 【三次握手、四次挥手流程】及【长短链接区别】
- vb odbc数据源 oracle,vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
- Android模拟器无法启动
- 全球光伏产业战加剧:美国考虑对进口太阳能电池施加紧急关税
- python算p值_Python sklearn-如何计算p值
- 联通笔试真题(有答案)
- Excel 添加复选框
- 面试题--精选Hadoop选择题
- 纯CSS+HTML+JS实现的简易个人网站