一、概念

  • 视图变换:设置相机位置和方向
  • 模型变换:设置模型位置和方向
  • 投影变换:透视投影和正投影。透视投影:近大远小;正投影:直接映射。
  • 视口变换:设置如何映射到窗口屏幕

二、内容

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视图相关推荐

  1. OpenGL编程指南(第八版)第一个渲染三角形案例代码在win8双显卡电脑VS2015中运行方法总结

    弄了好几天才把第一个程序运行出来,用该博客记录一下参考的博客资料及问题: 写得很好的博客参考资料为: http://blog.csdn.net/IceTeaSet/article/details/50 ...

  2. opengl编程指南第8版源码编译详细说明

    1. 到:https://github.com/openglredbook/examples 下载完全版的源码examples-master.zip,大小有131MB左右,不要下载缩略版的,否则\bi ...

  3. opengl编程指南第8版 环境搭建及原理

    转载:http://www.cnblogs.com/gagugagu/p/5211452.html OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统 ...

  4. OpenGl编程指南例2.4大白话分析

    OpenGl编程指南例2.4分析 即上一篇文章搭建了opengl的环境后,继续学习Opengl,被第二章的各种gen,bind,buffer搞得晕头转向,在还没有消化完全的时候,又被一计重击打到--为 ...

  5. OpenGL编程指南7:视图-

    1.前言 计算机图形学的要点就是创建三维物体的二维图像(图像必须是二维的,因为他是在平面的屏幕上显示的).但是,当我们决定怎样在屏幕上绘图时,必须使用三维坐标的方式考虑. 为了把一个物体的三维坐标变成 ...

  6. 《OpenGL编程指南(原书第8版)》——计算着色器

    原文  http://www.csdn.net/article/2014-11-21/2822754 主题 OpenGL 数学 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊 ...

  7. OpenGL深入探索——《OpenGL编程指南(原书第8版)》——计算着色器

    转载自 <OpenGL编程指南(原书第8版)>--计算着色器 概述 由于图形处理器每秒能够进行数以亿计次的计算,它已成为一种性能十分惊人的器件.过去,这种处理器主要被设计用于承担实时图形渲 ...

  8. 《OpenGL编程指南》一第2章 着色器基础

    本节书摘来自华章出版社<OpenGL编程指南>一书中的第2章,作者 Bill Licea-Kane ,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第2章 着色 ...

  9. OpenGL编程指南5:学习绘制不同风格的曲线

    1.不同风格曲线绘制 #include <vgl.h> //宏定义;当定义的宏不能用一行表达完整时,可以用"\"表示下一行继续 #define drawOneLine( ...

  10. OpenGL编程指南4:双缓冲实现运行

    1.前言 绘制一个旋转的方块,主要为了说明glutSwapBuffers()函数的用法. 同时也为了学习如何使用GLUT控制输入设备,并打开或关闭空闲处理函数. 2.OpenGL编程及程序剖析 /** ...

最新文章

  1. Android 清单文件 详解
  2. 平台资源表 表和表字段的命名规范——JEPLUS软件快速开发平台
  3. Linq之select子句
  4. java 回调模式_总结!!!总结!!!java回调以及future模式
  5. Spring boot切换Servlet容器
  6. 知乎真的一天不如一天了吗?
  7. php 中session与cookies的区别,php中session和cookie的区别
  8. Xavier上的第一个I2C驱动
  9. (30)VHDL实现比较器(有符号)
  10. ArcMap导入图层出现General function failure问题 [转]
  11. Tensorflow学习之 卷积神经网络 (一)什么是卷积?
  12. 【三次握手、四次挥手流程】及【长短链接区别】
  13. vb odbc数据源 oracle,vb.net写的odbc连接dsn数据源和ole链接oracle的小例子
  14. Android模拟器无法启动
  15. 全球光伏产业战加剧:美国考虑对进口太阳能电池施加紧急关税
  16. python算p值_Python sklearn-如何计算p值
  17. 联通笔试真题(有答案)
  18. Excel 添加复选框
  19. 面试题--精选Hadoop选择题
  20. 纯CSS+HTML+JS实现的简易个人网站

热门文章

  1. 图神经网络在知识图谱中的应用
  2. 浏览器兼容性测试工具
  3. EOS REX 安全系列之从源码开始玩转 REX(一)
  4. Docker配置阿里云镜像加速器以及镜像的常用操作命令
  5. vue 修改logo实现展示自定义的logo
  6. 《三》减小 HTTP 响应的大小
  7. Matlab科研绘图颜色补充(特别篇)—51种中国传统颜色
  8. mac os 下 打开 JXM 文件
  9. 裁判文书网爬虫(2019.5.15更新)
  10. Java多文件生成并压缩下载