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. am335x Qt SocketCAN Demo hacking

    /*********************************************************************************** * am335x Qt Soc ...

  2. Linux C socket 封装

    /************************************************************************** * Linux C socket 封装 * 声明 ...

  3. Audition CS6在Win 7中“音频输入的采样频率与输出设备不匹配”问题的解决 - imsoft.cnblogs

    1.运行Audion CS6,出现问题框. 2.右击任务栏右下方的那个小喇叭图标,在弹出的提示框里,单击“播放设备”.如图: 3.单击“播放设备”后,在图内左键单击“扬声器”然后双击“扬声器”,出现下 ...

  4. Linux系统如何制作U盘启动盘更换系统

    进入这个网站balenaEtcher,直接下载可接

  5. Windows环境下搭建Nginx和多版本PHP共存

    PHP版本众多,彼此之间兼容性不好,不同程序经常需要的不同版本的PHP版本.这里介绍如何使用NGINX让不同版本的PHP共存. 软件下载地址 与nginx整合的php需要选择Non Thread Sa ...

  6. 转-java编译时error: illegal character '\ufeff' 的解决办法-https://blog.csdn.net/t518vs20s/article/details/80833061

    原文链接:https://blog.csdn.net/shixing_11/article/details/6976900 最近开发人员通过SVN提交了xxx.java文件,因发布时该包有问题需要回退 ...

  7. 感悟:Java新手一点想法

    在2年前写的博客,写的那么幼稚,工作了,工作经验多重要啊,有3年的开发经验,工资8000-12000 没接触Java框架之前,以为这些东西多神秘,多了不起,多高大上,其实也就那样 最重要的搞懂交互的流 ...

  8. solr相关

    http://www.cnblogs.com/arli/ 博主介绍: 武汉理工大学计算机系 华为java工程师 华为企业版Hadoop工程师 华为大数据解决方案架构师 国盛天丰软件工程师

  9. event store

    Event Store The documentation has now moved to the wiki in this repository. For a quick start, look  ...

  10. Linux挂载命令

    版权声明:本文为"bcoder编程网"原创文章.原文地址:http://www.bcoder.cn,欢迎訪问! https://blog.csdn.net/wang7396/art ...