有两个观点可以理解模型转换,我从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();
}
从本地坐标视图
在这个观点中,我们可以理解为:
目前的转型矩阵(CTM)是:
从全球固定坐标视图
从这个角度来看,我们可以得到:
答案 0 :(得分:0)
两个坐标系只是一个惯例。总有一个全局坐标系,但可能有许多本地系统。本地系统的概念只是一种惯例。通用变换矩阵M
将顶点从一个空间转换为另一个空间:
v' = M * v
因此v
位于一个坐标空间中,v'
位于另一个坐标空间中。如果M
描述了对象的位置,我们说它将顶点从本地对象坐标系放到全局 world 坐标系中。另一方面,如果它描述了摄像机位置和投影,它会将 world 坐标系中的顶点放到另一个局部 eye 坐标系中。
具有关节的复杂对象(例如人形字符或带铰链的机制)实际上可能有几个中间局部空间,其中转换是链接的,具体取决于对象骨架的结构。
通常,人们使用object space
定义模型的顶点,world space
这是一个坐标可以相互关联的全局空间,camera space
或{{ 1}}这是屏幕坐标的空间。但随着OpenGL 3着色器的引入,这些完全是任意的:您可以编写着色器,以便它使用单个矩阵将顶点从对象空间直接转换为屏幕空间。所以不要担心坐标框架,只关注手头的任务 - 你想要显示什么以及对象应该如何移动(相对于彼此或相对于某些公共参考)。