矩阵堆栈操作

2019-07-08  本文已影响0人  繁星纵变

顶点变化管线图中,我们需要对模型视图矩阵和投影矩阵进行设置或者变换。

矩阵堆栈

本质还是堆栈,只是存储着矩阵。#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);

上一篇下一篇

猜你喜欢

热点阅读