变换管线
来源:互联网 发布:钻石儿童玩具淘宝网 编辑:程序博客网 时间:2024/06/11 20:11
变换管线如何处理模型视图矩阵和投影矩阵的。
首先,我们的顶点将被视为一个1X4矩阵,其中前3个值为X,Y和Z坐标。第4个数字是一个缩放因子,如果需要的话我们可以手动进行设置。这就是w坐标,通常在默认情况下为1.0,我们很少会真正去直接修改这个值。然后,顶点将乘以模型视图矩阵,生成变换的视觉坐标。随后,视觉坐标在乘以投影矩阵,生成裁剪坐标。裁剪坐标随后再除以w坐标,生成规范化设备坐标。其中w值可能会被投影矩阵或模型视图矩阵修改,这取决于所发生的变换。透视除法将作为图元装配过程的一部分进行。最后,坐标三元组通过视口变换映射到2D平面上。这项操作也是由一个矩阵来表示的,但不能直接指定或者修改这个矩阵。OpenGL将在内部根据指定的glViewport值来设置这个矩阵。
P114 图4.29
--------------- 使用矩阵堆栈
在分层方式中,一个或多个对象会相对于另一个对象进行绘制,在这种方式中经常会应用到变换。这样就会需要大量代码进行构造和管理矩阵在3D空间中建立复杂的场景。
习惯上,我们会使用一个矩阵堆栈来帮助完成这些工作,math3d有个实用类GLMatrixStack.
构造函数
GLMatrixStack::GLMatrixStack(int iStackDepth = 64); //默认的堆栈深度为64
通过调用在顶部载入这个单位矩阵
GLMatrixStack::LoadIdentity(void);
或者可以在堆栈的顶部载入任何矩阵
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
可以用一个矩阵乘以矩阵堆栈的顶部矩阵,相乘得到的结果随后将存储在堆栈的顶部
void GLMatrixStack:: MultMatrix(const M3DMatrix44f);
用GetMatrix 函数获得矩阵堆栈顶部的值,
仅仅获得顶部矩阵的副本
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);
压栈 复制了当前的矩阵值,并将新的值放入了堆栈的顶部。类似的,PopMatrix 将移除顶部矩阵,并恢复下面的值
除了将当前矩阵堆栈之外,通过M3DMatrix44f数据类型或者GLFrame类,还可以将任意一个矩阵压入到堆栈的顶部。
------------ 仿射变换
void GLMatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y ,GLfloat z);
void GLMatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z);
void GLMatrixStack::Scale(GLfloat x ,GLfloat y ,GLfloat z);
Rotate函数接受角度值而不是弧度值。所有这3个函数都可以创建恰当矩阵,然后这个矩阵乘以矩阵堆栈顶部的元素,实际上就是对当前矩阵添加矩阵添加变换。
------------ 管理管线
GLGeometryTransform为我们跟踪记录模型视图投影矩阵和正规矩阵,并快速检索模型视图投影矩阵或正规矩阵堆栈的顶部。
例子代码:http://download.csdn.net/detail/u012419410/7858307
------------加点调料
- 变换管线
- 投影 & 变换管线
- 渲染管线-顶点变换
- OpenGL开发 几何变换:管线
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- PipeLine_I--图形管线的各个变换矩阵
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- OpenGL图形管线和坐标变换
- 3D渲染管线中的变换矩阵及推导过程
- Opengl渲染管线 坐标变换 纹理与光照
- 3D游戏基础 Direct3D(三) 固定管线之变换
- OpenGL图形管线和坐标变换[转](模型视图矩阵推导)
- 二叉树中两个节点的最近公共父节点
- 字符串匹配——Brute-Force 简单匹配算法
- POJ 3253 Fence Repair(经典贪心问题)
- LeetCode—二叉树遍历的情况
- c#接口
- 变换管线
- Java中的选择结构
- Android Activity 常用功能设置(全屏、横竖屏等)
- Miller__Rabin素数测试
- Qt中 QString 和int, char等的“相互”转换
- (转)关于推荐系统中的特征工程
- Android实现HID鼠标的指针自定义
- LeetCode之旅(36)
- Sqlite数据类型