OpenGL chapter4 基础变换
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 基础变换的更多相关文章
- OpenGL 的空间变换(上):矩阵在空间几何中的应用
在使用 OpenGL 的应用程序中,当我们指定了模型的顶点后,顶点依次会变换到不同的 OpenGL 空间中,最后才会被显示到屏幕上.在变换的过程中,通过使用矩阵,我们更高效地来完成这些变换工作. 本篇 ...
- OpenGL 的空间变换(下):空间变换
通过本文的上篇 OpenGL 的空间变换(上):矩阵在空间几何中的应用 ,我们了解到矩阵的基础概念.并且掌握了矩阵在空间几何中的应用.接下来,我们将结合矩阵来了解 OpenGL 的空间变换. 在使用 ...
- opengl中场景变换|2D与3D互转换(转)
opengl中场景变换|2D与3D互转换 我们生活在一个三维的世界——如果要观察一个物体,我们可以: 1.从不同的位置去观察它.(视图变换) 2.移动或者旋转它,当然了,如果它只是计算机里面的物体,我 ...
- 图像滤镜艺术--编码基础(Photoshop基础变换的代码实现)
原文:图像滤镜艺术--编码基础(Photoshop基础变换的代码实现) 自从上一篇博客写完之后,到现在已经有段时间了,这段时间不是不想接着写,只是想做的更好了在写出来给大家看呵呵. 今天,我将给大家介 ...
- 【Notes_3】现代图形学入门——基础变换、MVP变换模型
基础变换(二维) 三维变化与二维变换矩阵类似 齐次坐标下的基础变换 Scale: \[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s ...
- OpenGL的视图变换、模型变换、投影变换、视口变换
产生目标场景的过程类似于用照相机进行拍照: (1) 把照相机固定在三角架上,并让他对准场景从不同位置观察场景(视图变换) gluLookAt (2) 对场景进行安排,使各个物体在照片中的位置是我们所希 ...
- OpenGL旋转平移 变换
#include<gl/glut.h> #include<gl/GL.h> #include<gl/GLU.h> #include<math.h> #i ...
- 简单理解OpenGL模型视图变换
前几天学习了OpenGL的绘图原理(其实就是坐标的不停变换变换),看到网上有个比较好的例程,于是学习了下,并在自己感兴趣的部分做了注释. 首先通过glMatrixMode(GL_MODELVIEW)设 ...
- OpenGL chapter5 基础纹理
Chapter5 基础纹理 Contents: ==================================================== | 任务 | 使用的函数 ========== ...
随机推荐
- svn忽略文件后缀
*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store Release ...
- EXCEL教程,包你一学就会
片名称:自动筛选 照片名称:在Excel中字符替换 照片名称:在Excel中直接编辑“宏” 照片名称:在Excel中为导入外部数据 照片名称:在Excel中行列快速转换 照片名称:在Excel中运行“ ...
- 查看图片插件--Viewer(类似于qq和微信聊天 的查看图片)
Viewer的github地址:https://github.com/fengyuanchen/viewer 下载该插件(在文件夹dist里面) 具有参考价值的几个网站:http://www.dow ...
- koa-connect源码解析
文中提到的koa均为koa2 提到nodejs, 想必大家都知道express和koa. express: 大 koa: 小 比较的的是功能, 社区, 中间件,相关资源等 这里我就专门说说中间件吧, ...
- SQL Server常用SQL集合
================================================ 1.SQL查询一年之内的数据记录 select * from 表名 where CreateDate& ...
- CTF密码学之摩斯密码
通过不用的排列顺序来表达不用的英文字母,数字和标点符号,摩斯电码由.和_构成 字母 字符 电码符号 字符 电码符号 A ._ N _. B _... O _ _ _ C _._. P ._ _. D ...
- Microsoft - Get Course Order
// "static void main" must be defined in a public class. public class Main { public static ...
- 【maven】Maven根据Profile读取不同配置环境配置文件
开发需求:在日常开发中,我们大多都会有开发环境(dev).测试环境(test).生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低 ...
- 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef
使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...
- Digester库使用总结
1.Digester是Apache软件基金会的Jakarta项目下的子Commons项目下的一个开源项目,Digester API包含3个包:org.apache.commons.digester,提 ...