opengl的旋转平移问题

士兵木木 2013-04-01 10:35:24
各位大神,小弟最近在做三维仿真,对opengl中的旋转函数glRotatef()和平移函数glTranslatef()产生疑问,一个正方体经过这两个函数多次变换后发现物体完全只是按照自己的坐标系旋转平移,不是按照世界坐标系运动,网上找了很多,glPushMatrix();和glPopMatrix();将矩阵压入和取出堆栈,有哪位大神能指条明路讲解一下这到底是怎么回事?网上的答案让我对矩阵的压入和取出完全没法理解!最后,如何才能做到让物体只绕着世界坐标系进行运动!!!
...全文
309 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
士兵木木 2013-04-03
  • 打赏
  • 举报
回复
如果改为GL_PROJECTION的话我接下来就不知道该怎么绘图了哇?之后绘制的实体都不见了! (顺便再问一下:我需要让物体能够始终绕着水平的x轴,竖直的y轴,指向屏幕外的z轴旋转,是不是需要进行手动计算这三根轴在运动过程中的向量?)
ri_aje 2013-04-03
  • 打赏
  • 举报
回复
你给的这些信息对于解决问题就是杯水车薪,复杂问题能出错的地方太多了,在这帖子里我始终有种瞎子摸象的感觉,交流起来太费劲。你要真需要帮助,就把完整的代码上来,可编译的,不需要自己再去配其他库的,我有空可以帮你调一下。否则我也不想浪费时间了。ps. 要是 windows 的程序就免了吧,没功夫再去配 vs,glut 的没问题。
ri_aje 2013-04-03
  • 打赏
  • 举报
回复
lookat 应该用于修改 projection matrix, 不是 modelview
  
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(10,10,10,   -1,-1,-1,    -1,1,-1);
士兵木木 2013-04-02
  • 打赏
  • 举报
回复
自己顶一下!!
士兵木木 2013-04-02
  • 打赏
  • 举报
回复
void CTestView::DrawScene() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色的缓存和深度缓存 glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(10,10,10, -1,-1,-1, -1,1,-1); glTranslatef(0.0f,0.0f,0.0f); glBegin(GL_LINES); //直线绘制坐标平面 glColor3f(1.0f,1.0f,1.0f); for(int co_x=-20;co_x<20;co_x++) { glVertex3f(co_x,0.0f,20.0f); glVertex3f(co_x,0.0f,-20.0f); } for(int co_z=-20;co_z<20;co_z++) { glVertex3f(20,0.0f,co_z); glVertex3f(-20,0.0f,co_z); } glEnd(); ……(这里还有其他的绘图函数,绘图形式和以上绘制平面一样) SwapBuffers(wglGetCurrentDC()); } 我是从网上找的一段代码,对opengl只是稍微了解,希望各位大师能给小弟指教,谢谢!
ri_aje 2013-04-02
  • 打赏
  • 举报
回复
每次刷新之前都重新初始化模型试图矩阵和投影矩阵吗?如果有的话,这些矩阵的设置代码和正方体变换的代码相对位置是什么样的。
士兵木木 2013-04-02
  • 打赏
  • 举报
回复
glTranslatef(translatex+6.0f,translatey+1.0f,translatez+0.0f);//translatex(y)用于前后平移 glRotatef(rotatex*10,1.0f,0.0f,0.0f);//绕x轴旋转 glRotatef(rotatey*10,0.0f,1.0f,0.0f);//绕y轴旋转 glRotatef(rotatez*10,0.0f,0.0f,1.0f);//绕z轴旋转 glBegin(GL_QUADS);//多组独立填充四边形 画正方体…… glEnd(); translatex和translatey…以及rotatex和rotatey这六个参数通过键盘方向键按键消息来改变值 程序中如果进行多次变化后,物体的局部坐标系就和世界坐标系不重合了,之后的变换就完全无法准确操作了。我的程序是想物体始终按照平常的(x向右,y向上,z向外)的方式进行变换!
ri_aje 2013-04-01
  • 打赏
  • 举报
回复
上代码看看你现在是怎么操作的,也许是变换顺序出现了问题呢。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧