简单理解OpenGL模型视图变换】的更多相关文章

前几天学习了OpenGL的绘图原理(其实就是坐标的不停变换变换),看到网上有个比较好的例程,于是学习了下,并在自己感兴趣的部分做了注释. 首先通过glMatrixMode(GL_MODELVIEW)设置当前操作的矩阵为模型视图矩阵,然后通过glPushMatrix()和glPopMatrix()函数对矩阵进行压栈出栈操作. 对矩阵进行压栈操作实际上是将当前的模型视图矩阵保存起来,相当于:我对一份代码或者数据进行修改,我对代码或者数据改来改去之后不想再啰啰嗦嗦麻麻烦烦的"逆操作"恢复代码…
OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对准场景 从不同位置观察场景(视图变换) (2)对场景进行安排,使各个物体在照片中的位置是我们所希望的 移动,旋转或者放大缩小场景中的物体(模型变换) (3)选择照相机镜头,并调整放大倍数(调焦) 显示物体时,可以选择物体是如何投影到屏幕上(投影变换) (4)确定照片的大小,放大照片还是缩小照片 把图…
以日月地为例的一个模型视图变换.绕了比较多的弯路,下面是几个注意点总结. 注意点: 1.GL函数对模型的操作是基于当前局部坐标系,即模型坐标系而非世界坐标系,二者只在第一次初始化完毕之后才重合: 2.矩阵变换——缩放.平移.旋转是左乘运算,即与代码顺序相反: 3.先平移再旋转类似星体的公转,先旋转再平移类似星体的自转: 4.本例中采取模型坐标系绘制,对不同星体的操作其局部坐标不断变换,连续绘制一系列星体:另一方面若是采取单独星体绘制,即每一个星体的绘制实则是在世界坐标系中绘制,需要用glLoad…
上一节我们提到了如何在一张画布上画一个简单几何图形,通过创建画布,获取WebGLRendering上下文,创建一个简单的着色器,然后将一些顶点数据绑定到gl的Buffer中,最后通过绑定buffer数据,提供buffer中顶点数据的情况,执行渲染绘制方法,将数据结果从buffer中刷新到帧缓存中.整个流程十分清晰明了,可是通过对比原来OpenGL中的整个流程,我们会发现其中还缺少了一些很重要的处理步骤,虽然我们创建了属于自己的着色器,可并没有对顶点数据进行类似于顶点处理管线中的模型视图变换.透视…
产生目标场景的过程类似于用照相机进行拍照: (1) 把照相机固定在三角架上,并让他对准场景从不同位置观察场景(视图变换) gluLookAt (2) 对场景进行安排,使各个物体在照片中的位置是我们所希望的 移动,旋转或者放大缩小场景中的物体(模型变换) glTranslate* ,glRotate* ,glScale* (3) 选择照相机镜头,并调整放大倍数(调焦) 显示物体时,可以选择物体是如何投影到屏幕上(投影变换) glFrustum , gluPerspective , glOrtho…
光源绕一个物体旋转,按下鼠标左键时,光源位置旋转. #include <GL/glut.h> static int spin = 0;static GLdouble x_1 = 0.0;static GLdouble y_1 = 0.0;static GLdouble z_1 = 0.0;void init(void){ glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable…
矩阵基础知识 要对矩阵进行运算,必须先要了解矩阵的计算公式,这个知识的内容涉及到了线性代数. 我们知道在Cocos2dx中,有关于平移,旋转,缩放等等操作,都必须要进行矩阵的乘法. 只需要一张图就能理解怎么计算矩阵的乘法了. Cocos2dx中的代码实现 先来看cocos2dx中的代码实现: .h文件的代码 #include <stdio.h> #include "CCMath.h" #include "CCVector2.h" #include &qu…
计算机三维图形学中,一个基本的任务是如何描述三维空间中一个物体位置的变化,也就是如何 描述物体的运动.通常情况下,物体位置的变化包含三个基本的变化:平移.旋转和缩放,物体的运动也可以用这三个基本的运动形态的组合来描述. 图形学中物体运动的数学表述是:将点的初始位置坐标P0映射到经过平移.旋转.绽放后的新位置P1的过程. 平移: 平移就是在原始的三维空间坐标点上分别加上对应方向上的平移量: 旋转: 旋转分为两类:在二维平面和三维空间中的旋转. 二维平面上的旋转: 相对坐标注原点旋转角度θ: 以矩阵…
模型变换.视图变换.投影变换.视口变换介绍 opengl中存在四种变换,分别是模型变换,视图变换,投影变换,视口变换.这四种变换是图形渲染的基本操作,实质上这四种变换都是由矩阵乘法表示(这些操作都是由一个4*4的矩阵来完成的),通过变换,我们可以看到各种通的显示效果,最简单的效果就是让图元沿着某个方向变换(放大,缩小,翻转等)或者对所要显示的图元进行裁剪.接下来我们就详细介绍这四种变换以及相互之间的联系. 我们要在屏幕上显示一个具有三维坐标的物体,大致需要以下步骤: 1.     进行模型,视图…
前面两节内容已经说完了所有的三种变换.也就是说我们现在程序里面既不需要glLookAt(),也不需要gluPerspective(),这些矩阵我们都可以自己写.然后,再用glMultMatrix()来调用这些矩阵,注意一点就是OpenGL是左乘,前面给出的矩阵都是右乘矩阵,所以调用的时候需要转置,摆放的位置也要注意.当然,如果用shader的话,这些函数也就用不到了,矩阵顺序也可以自己定义.这里所有的变换都是作用在顶点(Vertex)上的,但是还有一类数据需要进行变换,那就是顶点法线.我们在计算…