文章图片
顶点变化管线图中,我们需要对模型视图矩阵和投影矩阵进行设置或者变换。
矩阵堆栈
本质还是堆栈,只是存储着矩阵。#include "GLMatrixStack.h",使用GLMatrixStack工具类来方便开发。
GLMatrixStack常用方法
//类型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
//a.在堆栈顶部载?一个单元矩阵
void GLMatrixStack::LoadIdentity(void);
//b.在堆栈顶部载入任何矩阵 //参数:4*4矩阵
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
//c.矩阵乘以矩阵堆栈顶部矩阵,相乘结果存储到堆栈的顶部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
//d.获取矩阵堆栈顶部的值 GetMatrix 函数
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);
文章图片
abcd操作过程图
矩阵堆栈的压栈和出栈
PushMatrix和PopMatrix最好一一对应
//a将当前矩阵压入堆栈(将栈顶矩阵copy一份再放到栈顶)
void GLMatrixStack::PushMatrix(void);
//b将M3DMatrix44f 矩阵对象压入当前矩阵堆栈
void PushMatrix(const M3DMatrix44f mMatrix);
//c将GLFame 对象压?入矩阵对象
void PushMatrix(GLFame &frame);
//d出栈(出栈指的是移除顶部的矩阵对象)
void GLMatrixStack::PopMatrix(void);
文章图片
abcd操作过程图
矩阵仿射变换
与QuartzCore框架下的CATransform3D差不多,都是进行模型变换(旋转、平移、缩放)。
//Rotate 函数angle参数是传递的度数,?而不不是弧度
void MatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
【矩阵堆栈操作】void MatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z);
void MatrixStack::Scale(GLfloat x,GLfloat y,GLfloat z);