opengl中局部坐标和全局坐标之我的理解

来源:互联网 发布:网络小祖宗是什么意思 编辑:程序博客网 时间:2024/04/28 01:25


很多资料里,包括红宝书,关于局部坐标和全局坐标的解释,都有一句话“代码是一样的,只是理解的角度和方式不一样”,相信很多人看了这句话心里都犯嘀咕。

   很多人的疑问是,什么时候用全局坐标,什么时候用局部坐标,然后还以为有一个标志或者函数可以在这两个坐标间切换,其实都没有。还是那句话“代码是一样的,只是理解的角度和方式不一样”,哈哈~~别打我。。。

局部坐标和全局坐标,通俗的理解,我觉得可以这样理解,全局坐标就是固定在那里不动的,物体(局部坐标)在动而它不动。而局部坐标就是绑定在物体身上的,物体跟坐标一起移动。而且物体的旋转也即局部坐标的旋转,所以局部坐标的xyz轴的指向将随着旋转不停改变。


红宝书里说得很好,因为这两种坐标有了上面的特性,所以就有了理解上的差异。而且书上那个例子也讲的很好,我就不说了,推荐去看一下。


接下来上代码,解释我的理解。

glLoadIdentity(); //重置矩阵

glTranslatef(0.0f,0.0f,zoom);//将物体(相对于全局坐标)或者局部坐标往z轴移动zoom个单位

glRotatef(tilt,1.0f,0.0f,0.0f);
//沿x轴倾斜tilt个角度
glRotatef(star[loop].angle,0.0f,0.0f,1.0f);//沿z轴旋转angle个角度,局部坐标旋转时,其x,y,z轴所指向也在不停改变。从全局固定坐标的角度来看,此效果相当于公转。

glTranslatef(star[loop].dist,0.0f,0.0f);//想x轴方向移动dist个单位长度

glRotatef(-star[loop].angle,0.0f,0.0f,1.0f);//沿z轴旋转-angle个角度,即再转回来

glRotatef(-tilt,1.0f,0.0f,0.0f);//同上

这是NeHe教程里第9课的代码.

上面这段代码既可以按全局坐标理解也可以按局部坐标理解,这就是为什么很多人说上面那句经典的话。


一个简单的方法,按全局坐标来理解的话,则代码从下往上看。而按局部坐标来理解,则代码从上往下看。你可以试着在纸上或是脑中画一下,最后它们的结果是一样的,这就是那句话的精髓。


原创粉丝点击