美文网首页OpenGL
OpenGL的常见矩阵和变化

OpenGL的常见矩阵和变化

作者: iOSer_jia | 来源:发表于2020-07-10 09:51 被阅读0次

前言

OpenGL的坐标转换中需要对顶点坐标进行计算,这种对多个顶点的计算我们需要借助到矩阵,OpenGL所有的变换都是通过矩阵相乘实现的,本文将通过各种变化来了解矩阵的作用。

坐标系变换

一个物体从初始的3维坐标到屏幕上的2维坐标需要经历物体坐标->世界坐标->观察者坐标->裁剪坐标->规范化设备坐标->屏幕坐标这个过程。

坐标系变换

模型矩阵

用于将物体从物体坐标转化为世界坐标,事实上,物体本身的变化也可以用模型矩阵,比如旋转、平移等。具体可以用下面代码获取模型矩阵。

GLFrame objectFrame;
// 旋转(绕世界坐标系x轴旋转)
objectFrame.RotateWorld(m3dDegToRad(-5.0f), 1.0f, 0.0f, 0.0f);
// 模型矩阵
M3DMatrix44f mObjectFrame;

objectFrame.GetMatrix(mObjectFrame);

视图矩阵

用于将物体从世界坐标转化为观察者坐标,涉及到观察位置变化的需要用到试图矩阵。
可以用下面代码获取试图矩阵

GLFrame cameraFrame;
cameraFrame.MoveForward(-30.0f);
// 视图矩阵
M3DMatrix44f mCamera;

cameraFrame.GetCameraMatrix(mCamera);

投影矩阵

用于物体从观察者坐标转化为裁剪坐标,和投影方式有关,在确定投影方式后我们就可以得到投影矩阵。

GLFrustum viewFrustum;
// 设置透视投影
viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 500.0f);

M3DMatrix44f projectionMatrix = viewFrustum.GetProjectionMatrix();

矩阵堆栈

在绘制场景是,我们往往需要使用很多矩阵进行换算,而我们常常需要保存这些换的中间状态,以便变化后的快速恢复,比如场景绘制是我需要让矩阵从A到B,再由A到C,如果没有矩阵堆栈,我们要A到B的矩阵,再由B->A,之后才能有A到C,而有矩阵栈,我们只要让A入栈,再让B入帐,执行完A->B后,再将栈顶的B出栈,执行A->C,显然比单个矩阵效率高很多。

GLMatrixStack   modelViewMatrix;
//调用顶部载入单元矩阵
modelViewMatrix.LoadIdentity();
// 压栈,如果括号内为空则将栈顶的矩阵复制一份放到栈顶
modelViewMatrix.PushMatrix();
//矩阵乘以矩阵堆栈的顶部矩阵,相乘的结果随后简存储在堆栈的顶部
modelViewMatrix.MultMatrix(mCamera);
//矩阵乘以矩阵堆栈的顶部矩阵,相乘的结果随后简存储在堆栈的顶部
modelViewMatrix.MultMatrix(mObjectFrame);

//几何变换的管道(用于合成模型试图投影矩阵(mvp矩阵))
GLGeometryTransform transformPipeline;
//设置变换管线以使用两个矩阵堆栈
transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);

// 调用平面着色器
shaderManager.UseStockShader(GLT_SHADER_FLAT,transformPipeline.GetModelViewProjectionMatrix(), vBlack);
// 绘制
... 
//还原到以前的模型视图矩阵(单位矩阵)
modelViewMatrix.PopMatrix();

相关文章

  • OpenGL的常见矩阵和变化

    前言 OpenGL的坐标转换中需要对顶点坐标进行计算,这种对多个顶点的计算我们需要借助到矩阵,OpenGL所有的变...

  • OPenGL 中的矩阵压栈/出栈

    我们知道OPenGL 中的图形变化是用矩阵来记录保存的.OpenGL 矩阵基础变化 简单来讲,当你做了一些移动或旋...

  • OpenGL -- 变化和矩阵堆栈

    视图变换 应用到场景中的第一种变换,用来确定场景中的有利位置,在默认情况下,透视投影中位于原点(0,0,0),并沿...

  • OpenGL 问题总结(持续更新)

    OpenGL的常见问题以及基础的概念知识(持续更新!!!) 1.OpenGL中矩阵的概念,什么是Model,Vie...

  • OpenGL 矩阵基础变化

    OpenGL⾥的矩阵/向量 向量:3个值(x、y、z)组合起来表示2个重要的值,⽅向和数量. 矩阵: 在OPenG...

  • OpenGL中的向量和矩阵

    OpenGL坐标变化时经常用到矩阵来计算变化后点的位置,为了更好的理解3D数学在OpenGL中的作用,本文将简单地...

  • OpenGL-矩阵压栈出栈浅析

    OpenGL绘制图形需要经过变化才能达到用户目的,而变换是通过矩阵进行操作的。 OpenGL一般通过视图变换、模型...

  • OpenGL矩阵基础变化理解

    前言 本篇文章的目的主要是为了理解在OpenGL应该如何利用矩阵堆栈对3D图形进行基础变化操作。 三种基础仿射变化...

  • opengles-坐标系和矩阵

    坐标系和矩阵是opengl的基础也是难点,本文总结了opengl的各种坐标系和矩阵,如果有错误欢迎指正。 1.什么...

  • 图形 API 简介

    常见的图形 API 1、OpenGL、OpenGL ES OpenGL 和OpenGL ES 都是由 Khrono...

网友评论

    本文标题:OpenGL的常见矩阵和变化

    本文链接:https://www.haomeiwen.com/subject/zrepcktx.html