OpenGL理解两种观点来看模型转换

时间:2014-09-29 08:24:35

标签: opengl matrix

有两个观点可以理解模型转换,我从Red book第7版,[Grand, Fixed Coordinate System ]和[Moving a Local Coordinate System ]中读到。

我的问题是:

两个观点之间有什么区别以及何时在指定情况下使用它们?

其他背景信息:

我想给你一些帮助我的背景信息,或者你可以忽略以下细节。

我通过以下方式理解这两个观点。认为我有以下代码: (像glTranslatef这样的函数已被弃用,被数学库取代,但理论可能会有所帮助。)

//render the sence,and use orthogonal projection
void display( void )
{   
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    drawAixs(4.8f);//draw x y z aixs,4.8 is axis length
    glRotatef(45.0,0.0,0.0,1.0);
    glTranslatef(3.0,0.0,0.0);
    glutSolidCube(2.0);
    glutSwapBuffers();
}

从本地坐标视图

在这个观点中,我们可以理解为:

enter image description here

目前的转型矩阵(CTM)是: enter image description here

从全球固定坐标视图

从这个角度来看,我们可以得到:

enter image description here

1 个答案:

答案 0 :(得分:0)

两个坐标系只是一个惯例。总有一个全局坐标系,但可能有许多本地系统。本地系统的概念只是一种惯例。通用变换矩阵M将顶点从一个空间转换为另一个空间:

v' = M * v

因此v位于一个坐标空间中,v'位于另一个坐标空间中。如果M描述了对象的位置,我们说它将顶点从本地对象坐标系放到全局 world 坐标系中。另一方面,如果它描述了摄像机位置和投影,它会将 world 坐标系中的顶点放到另一个局部 eye 坐标系中。

具有关节的复杂对象(例如人形字符或带铰链的机制)实际上可能有几个中间局部空间,其中转换是链接的,具体取决于对象骨架的结构。

通常,人们使用object space定义模型的顶点,world space这是一个坐标可以相互关联的全局空间,camera space或{{ 1}}这是屏幕坐标的空间。但随着OpenGL 3着色器的引入,这些完全是任意的:您可以编写着色器,以便它使用单个矩阵将顶点从对象空间直接转换为屏幕空间。所以不要担心坐标框架,只关注手头的任务 - 你想要显示什么以及对象应该如何移动(相对于彼此或相对于某些公共参考)。