美文网首页
OpenGL中的不同角度的移动

OpenGL中的不同角度的移动

作者: 卡布奇诺_95d2 | 来源:发表于2020-08-15 15:38 被阅读0次

在OpenGL中观察一个物体的移动,一般可以通过两种方式:

  • 观察者不动,移动物体
  • 物体不动,移动观察者

观察者不动,物体移动

image.png
  1. 设置观察者的位置
//表示离屏幕之间的距离,负数:往屏幕后面移动;正数:往屏幕前面移动
cameraFrame.MoveForward(-10.0f);
  1. 将移动绕X轴旋转
viewFrame.RotateWorld(m3dDegToRad(-15), 1, 0, 0);

此时可以看到,观察者矩阵和物体矩阵都发生了变换。因此,若要获得最后所需的ModelView矩阵,则需要依次对观察者矩阵、物体矩阵按顺序进行矩阵相乘。
注意,由于矩阵的特性是不满足交换律的,因此对矩阵相乘的时候一定得严格按照先与观察者矩阵相乘,再与物体矩阵相乘的顺序。
矩阵相乘的代码如下:

//将视图矩阵堆栈压入一个单元矩阵,便于后继做相乘操作
modelViewMatix.PushMatrix();

//获取观察者矩阵,并将视图矩阵堆栈中的栈顶矩阵(此处为前面压入的单元矩阵)与观察者矩阵进行相乘得到新的观察者矩阵,将新的观察者矩阵压入视图矩阵堆栈中
M3DMatrix44f mCammer;
cameraFrame.GetCameraMatrix(mCammer);
modelViewMatix.MultMatrix(mCammer);

//获取物体矩阵,并将视图堆栈矩阵中的栈顶矩阵(此处为前面步骤得到的新视图矩阵)与物体矩阵相乘
M3DMatrix44f mObject;
viewFrame.GetMatrix(mObject);
modelViewMatix.MultMatrix(mObject);

通过以上代码就可以达到观察者固定位置后不再移动,而物体移动的效果。

物体不动,观察者移动

image.png
  1. 设置观察者的位置
cameraFrame.MoveForward(10.0f);
  1. 移动观察者
cameraFrame.RotateWorld(m3dDegToRad(-15), 1, 0, 0);

此时可以看到,整个移动过程只有观察者在动而物体是不动的。因此,若要获得最后所需要的ModelView矩阵,只需要在对模型视图矩阵堆栈压栈时候,将观察者矩阵压入即可。

modelViewMatix.PushMatrix(cameraFrame);

观察者矩阵中包含了观察者所有的变换,包括位置的移动,观察者的旋转等,矩阵的相乘操作会在变换管道中进行,最后通过变换管理获得最终所需的MVP矩阵。

总结

观察者动物体不动和观察不动物体动最后实现的效果是一样的,至于如何选择可根据实际项目的需要。
观察者不动物体动的时候要注意矩阵相乘的顺序,严格按照先乘观察者矩阵,再乘物体矩阵的顺序

相关文章

  • OpenGL中的不同角度的移动

    在OpenGL中观察一个物体的移动,一般可以通过两种方式: 观察者不动,移动物体 物体不动,移动观察者 观察者不动...

  • 摄像机

    摄像机相当于观察者的眼睛,观察者的移动可以看到不同位置的场景,但OpenGL只能移动场景。OpenGL没有摄像机的...

  • OpenGL-ES初探

    初识 OpenGL ES OpenGL ES是OpenGL的子集 OpenGL ES 是针对嵌入式设备及移动终端设...

  • 九、OpenGL ES 初探

    OpenGL ES OpenGL ES是OpenGL的子集 OpenGL ES 是针对嵌入式设备及移动终端设备的高...

  • OpenGL的绘制

    OpenGL渲染图像 OpenGL渲染图像需要执行的操作从OpenGL的几何图元中设置数据,用于构建形状。使用不同...

  • OpenGLES讲解稿

    今天我们讲一下OpenGL与OpenGL在移动端的应用OpenGL,Open Graphics Library,开...

  • OpenGLES理解白话篇

    今天我们讲一下OpenGL与OpenGL在移动端的应用OpenGL,Open Graphics Library,开...

  • OpenGL:正方形移动

    OpenGL:正方形移动

  • OPenGL 中的矩阵压栈/出栈

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

  • OpenGL ES--滤镜

    一、前言 OpenGL ES是OpenGL的一个子集,主要用于移动端图形渲染。苹果在2018年WWDC中宣布用me...

网友评论

      本文标题:OpenGL中的不同角度的移动

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