math3d库有两个数据类型,能够表示一个三维或四维向量:
M3DVector3f
M3DVector4f

4.3 理解投影
正投影 : 正交变换
透视投影 : 透视变换

表4.1 OpenGL变换术语概览
-------------------------------------------------------------
| 变换 | 应用                                |
------------------------------------------------------------
| 视图 | 指定观察者或照相机的位置                      |
-------------------------------------------------------------
| 模型 | 在场景中移动物体                          |
-------------------------------------------------------------
| 模型视图 | 描述视图和模型变换的二元性                     |
-------------------------------------------------------------
| 投影 | 改变视景体的大小或重新设置他的形状                   |
-------------------------------------------------------------
| 视口 | 这是一种伪变换,只是对窗口上的最终输出进行缩放           |
-------------------------------------------------------------

4.4.2 运用模型视图矩阵
GLShaderManager::UseStockShader(GLT_SHADER_FLAT,M3DMatrix44f m,GLfloat vColor[4]);
这个着色器在对图元进行渲染之前用每个向量乘以举证m。

m3dTranslationMatrix44(mTranslationMatrix , xPos, yPos, 0.0f);
shaderManager::UseStockShader(GLT_SHADER_FLAT,mTranslatonMatrix,vRed);
squareBatch.Draw();

4.5 更多对象
GLBatch:这个类的目的是为了解决容纳一个顶点列表并将它们作为一个特定类型的图元批次来进行渲染。
GLTriangleBatch:这个类专门作为三角形的容器,每个顶点都可以有一个表面法线,以进行光照计算和纹理坐标

4.5.1 使用三角形批次类
//首先 我们需要创建一个事件
GLTriangleBatch myCoolObject;
//然后通知容器最多打算使用的定点数,以开始创建网格
myCoolObject.BeginMesh(200);
//现在来添加三角形
void GLTriangleBatch::AddTriangle(M3DVector3f verts[3], M3DVector3f vNormals[3] ,M3DVector2f vTexCoords[3]);
//添加完成
myCoolObject.End();
//绘制
myCoolObject.Draw();

4.5.2 创建一个球体
void gltMakeSphere(GLTriangleBatch& sphereBatch, GLfloat fRadius, GLint iSlices, GLint iStacks);

4.5.3 创建一个环
void gltMakeTorus(⋯⋯⋯⋯⋯⋯⋯⋯);

4.5.4 创建一个圆柱或圆锥

4.5.5 创建一个圆盘

4.6 投影矩阵
4.6.1 正投影
我们使用math3d库或GLFrustum类来创建一个正投影矩阵
GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin,GLfloat zMax);

4.6.2 透视投影
我们使用GLFrustum 类来设置透视投影
GLFrustum::SetPerspective(float fFov, float fAspect, float fNear, float fFar);

4.6.3 模型视图投影矩阵(ModelViewProjection)

4.7 变换管线
4.7.1 使用矩阵堆栈
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
void GLMaxtrixStack::LoadIdentity(void);
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
const M3DMatrix44f& GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);

压栈和出栈
void GLMatrixStack::PushMatrix(void);
void PushMatrix(const M3DMatrix44f mMatrix);
void PushMatrix(GLFrame& frame);

void GLMatrixStack::PopMatrix(void);

OpenGL chapter4 基础变换的更多相关文章

  1. OpenGL 的空间变换(上):矩阵在空间几何中的应用

    在使用 OpenGL 的应用程序中,当我们指定了模型的顶点后,顶点依次会变换到不同的 OpenGL 空间中,最后才会被显示到屏幕上.在变换的过程中,通过使用矩阵,我们更高效地来完成这些变换工作. 本篇 ...

  2. OpenGL 的空间变换(下):空间变换

    通过本文的上篇 OpenGL 的空间变换(上):矩阵在空间几何中的应用 ,我们了解到矩阵的基础概念.并且掌握了矩阵在空间几何中的应用.接下来,我们将结合矩阵来了解 OpenGL 的空间变换. 在使用 ...

  3. opengl中场景变换|2D与3D互转换(转)

    opengl中场景变换|2D与3D互转换 我们生活在一个三维的世界——如果要观察一个物体,我们可以: 1.从不同的位置去观察它.(视图变换) 2.移动或者旋转它,当然了,如果它只是计算机里面的物体,我 ...

  4. 图像滤镜艺术--编码基础(Photoshop基础变换的代码实现)

    原文:图像滤镜艺术--编码基础(Photoshop基础变换的代码实现) 自从上一篇博客写完之后,到现在已经有段时间了,这段时间不是不想接着写,只是想做的更好了在写出来给大家看呵呵. 今天,我将给大家介 ...

  5. 【Notes_3】现代图形学入门——基础变换、MVP变换模型

    基础变换(二维) 三维变化与二维变换矩阵类似 齐次坐标下的基础变换 Scale: \[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s ...

  6. OpenGL的视图变换、模型变换、投影变换、视口变换

    产生目标场景的过程类似于用照相机进行拍照: (1) 把照相机固定在三角架上,并让他对准场景从不同位置观察场景(视图变换) gluLookAt (2) 对场景进行安排,使各个物体在照片中的位置是我们所希 ...

  7. OpenGL旋转平移 变换

    #include<gl/glut.h> #include<gl/GL.h> #include<gl/GLU.h> #include<math.h> #i ...

  8. 简单理解OpenGL模型视图变换

    前几天学习了OpenGL的绘图原理(其实就是坐标的不停变换变换),看到网上有个比较好的例程,于是学习了下,并在自己感兴趣的部分做了注释. 首先通过glMatrixMode(GL_MODELVIEW)设 ...

  9. OpenGL chapter5 基础纹理

    Chapter5 基础纹理 Contents: ==================================================== | 任务 | 使用的函数 ========== ...

随机推荐

  1. WebGL编程指南案例解析之多数据存储于一个缓冲区以及着色器通信

    //顶点着色器往片元着色器传值 //多个参数值存于一个缓冲对象中 var vShader = ` attribute vec4 a_Position; attribute float a_PointS ...

  2. HDU 2853 && HDU 3315

    http://acm.hdu.edu.cn/showproblem.php?pid=2853 题意:给一个n-m二分图,边权用一个n*m的矩阵表示,给出初始匹配,求二分图完美匹配相比初始匹配改变了几条 ...

  3. Python+Requests接口测试教程(2):requests

    开讲前,告诉大家requests有他自己的官方文档:http://cn.python-requests.org/zh_CN/latest/ 2.1 发get请求 前言requests模块,也就是老污龟 ...

  4. pycharm中tensorflow代码不能自动补全或import红线问题解决

    正确安装并配置好pycharm+tensorflow环境之后,可能在pycharm中导入tensorflow会有以下问题: 1. " import tensorflow as tf &quo ...

  5. 为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?

    如果你的团队没有觉得微信是低效的团队 IM 工具,那只有两种可能: 团队成员很少使用微信进行私人的生活和娱乐. 你就是一个低效的团队,而且还不自知. 本文内容 微信,连接一切 每个人都有微信 微信,低 ...

  6. java时间处理--持续时间格式化工具和常量类DurationFormatUtils

    阅读目录 DurationFormatUtils类简介 maven地址 构造方法 DurationFormatUtils() formatDurationHMS(long durationMillis ...

  7. LG3369 【模板】普通平衡树

    题意 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入x数 删除x数(若有多个相同的数,因只删除一个) 查询x数的排名(排名定义为比当前数小的数的个数+1.若有多个相 ...

  8. Oracle集合类型

    Oracle集合类型介绍   集合类型   1. 使用条件:    a. 单行单列的数据,使用标量变量 .     b. 单行多列数据,使用记录    c. 单列多行数据,使用集合        *集 ...

  9. 万年历(hao123)代码

    网上有很多类似的代码,比如网站:hao123,IP138.日梭万年历网络版 等等,不过日梭万年历相对比较详细,也可以看看另外一篇文章的介绍: 日梭万年历网络版:http://www.cnblogs.c ...

  10. php重新整理数组索引

    语法 array_merge(array1,array2,array3...) 参数 描述 array1 必需.输入的第一个数组. array2 必需.输入的第二个数组. array3 可选.可指定的 ...