您的位置:首页 > 运维架构

OpenGL(5)--太阳系和的日月地实现

2016-01-05 16:08 309 查看

太阳系和机器人的实现

全局坐标系和局部坐标系

如果用全局坐标系的思想来考虑问题,那么必须要注意矩阵乘法的顺序和代码中的顺序是相反的。而用局部坐标系来思考的话,所有的操作都是针对于当前不断变化的坐标系,因此,矩阵乘法很自然的与他们再代码中出现的顺序一样。


太阳系的实现

glPushMatrix()和glPopMatrix()可以消除上一次变换对本次变换的影响,使得本次变换都是基于世界坐标系的原点为参考点进行的。因此,实现太阳系,只需要把太阳先画出(默认在世界坐标系原点),然后保存当前视图,绘制行星,恢复视图,这种思路采用了全局坐标系的思想。


glPushMatrix();
glRotatef((GLfloat)day,0.0,1.0,0.0);
glTranslatef(1.0,0.0,0.0);
glutWireSphere(0.2,10,8);//draw planet
glPopMatrix();


日月地的实现

我们首先绘制太阳,然后进行模型视图变化,再绘制地球,然后我们把认为坐标原点此时移动到了地球所在位置(移动坐标系),并不调用glPushMatrix()保存变换矩阵,而是在原来基础上再进行模型视图变换,在相对于地球的某个位置绘制月球,这是符合实际的,因为月球是地球的卫星。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: