Opengl中的glTranslatef、glPushMatrix和glPopMatrix

 做一下学习笔记:


1 、 在opengl中,函数glTranslatef的作用就是移动坐标原点。对应的3个参数对应着3个坐标轴。
  如果你调用一次glTranslatef(1.0f,0.0f,0.0f)然后画一个小球,接着再调用次glTranslatef(0.0f,1.0f,0.0f)再画一个小球。
  此时,两个小球中,一个在另外一个正右方。
  所以,如果要使两个小球分别处于x、y轴,则需要在第二次画之前调用glLoadIdentity()函数,使坐标原点归位。
  另外,此处的坐标系为右手坐标系。
  切记切记。


2、 glPushMatrix、glPopMatrix操作其实就相当于栈里的入栈和出栈。
  许多人不明白的可能是入的是什么,出的又是什么。我也是自己反复做了下测试才懂的(利用无聊的web上机时间)。
  
  例如你当前的坐标系原点在你电脑屏幕的左上方。现在你调用glPushMatrix,然后再调用一堆平移、旋转代码等等,然后再画图。那些平移和旋转都是基于坐上角为原点进行变化的。而且都会改变坐标的位置,经过了这些变化后,你的坐标肯定不再左上角了。
  那如果想恢复怎么办呢?这时就调用glPopMatrix从栈里取出一个“状态”了,这个状态就是你调用glPushMatrix之前的那个状态。就如很多opengl的书上所讲:调用glPushMatrix其实就是把当前状态做一个副本放入堆栈之中。
  


呵呵,这次重新回归了opengl的怀抱。已经把3ds和md2模型搞定了。哎……想起今年他们虚拟漫游获奖的作品,两个动态模型(md2或mdl或x)都没有,也可以拿1等奖。呵呵,参加多了这种比赛,只会让自己更自大,更多的成为井底之蛙了。

你可能感兴趣的:(Web,测试)