Opengl多次选择的问题

newbor 2017-01-02 11:48:11
之前也查过一个关于这个问题的帖子,一直没有结果。
glRotatef(angle, 1 ,0, 0);
glRotatef(angle, 0 ,1, 0);
drawCube();
结果发现Cube先绕世界坐标Y轴旋转,然后再绕X轴旋转时,发现旋转轴X轴已经是Y轴旋转后的位置了,怎样做才能使Cube能绕固定的X,Y轴旋转。

看过别的地方说用glpushmatrix()跟glpopmatrix()来控制,不管怎么压栈弹栈,要旋转这两次再绘制Cube,结果都是会和上面是一样的。
还有说用矩阵,矩阵相乘的顺序不也是上面一样的么,就算先计算旋转矩阵R(X)R(Y)两个矩阵相乘,再乘以模型矩阵,
(R(X)R(Y))V 不也等于R(X)(R(Y)V)
这个问题困扰我好久了,是我哪里理解错了吗,求大佬们指教!~
...全文
390 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-13
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
赵4老师 2017-01-13
  • 打赏
  • 举报
回复
引用 12 楼 newbor 的回复:
[quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 9 楼 newbor 的回复:] "绕上次旋转前的Y轴再次旋转 和 绕上次旋转后即当前的Y轴再次旋转 能一样吗?"我的意思是前一个,可能之前写的意思不清楚
你既然知道两者有区别,试试写出两者分别对应怎样的变换矩阵不就得了。[/quote] 我主要就是问怎么写,我会写就不会来问了[/quote] 百度搜“三维变换”
newbor 2017-01-13
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
[quote=引用 9 楼 newbor 的回复:] "绕上次旋转前的Y轴再次旋转 和 绕上次旋转后即当前的Y轴再次旋转 能一样吗?"我的意思是前一个,可能之前写的意思不清楚
你既然知道两者有区别,试试写出两者分别对应怎样的变换矩阵不就得了。[/quote] 我主要就是问怎么写,我会写就不会来问了
schlafenhamster 2017-01-09
  • 打赏
  • 举报
回复
""绕上次旋转前的Y轴再次旋转" 就是 Y轴 旋转 回去 吧 ?
赵4老师 2017-01-09
  • 打赏
  • 举报
回复
引用 9 楼 newbor 的回复:
"绕上次旋转前的Y轴再次旋转 和 绕上次旋转后即当前的Y轴再次旋转 能一样吗?"我的意思是前一个,可能之前写的意思不清楚
你既然知道两者有区别,试试写出两者分别对应怎样的变换矩阵不就得了。
newbor 2017-01-06
  • 打赏
  • 举报
回复
"绕上次旋转前的Y轴再次旋转 和 绕上次旋转后即当前的Y轴再次旋转 能一样吗?"我的意思是前一个,可能之前写的意思不清楚
赵4老师 2017-01-05
  • 打赏
  • 举报
回复
绕上次旋转前的Y轴再次旋转 和 绕上次旋转后即当前的Y轴再次旋转 能一样吗?
赵4老师 2017-01-05
  • 打赏
  • 举报
回复
建议楼主学习或复习《计算机图形学》中的三维变换一章。
newbor 2017-01-05
  • 打赏
  • 举报
回复
就是屏幕的水平方向定位X轴,屏幕的垂直方向定为Y轴。
旋转时只绕这两个轴旋转,前一个旋转不影响后面的旋转。
举个例子,这是初始位置:

(XYZ轴分别是RGB)
然后绕Y轴旋转后:

最后!再绕X轴旋转:

可以看出第一次绕的Y轴是屏幕竖直方向的,但第二次绕的X轴,绕的是之(前绕Y轴后)改变过方向的X轴。但我是想要第二次是绕屏幕水平方向的X轴。

glMultMatrixf(glm::value_ptr(rmy));
glMultMatrixf(glm::value_ptr(rmx));
这是旋转的代码,这个小程序是鼠标控制物体自身旋转,鼠标在屏幕水平和竖直方向同时移动时,就需要连续旋转2次。
我提出的问题就是想让这两次旋转的轴向都是水平与竖直方向,而不是上述提到的问题。

schlafenhamster 2017-01-05
  • 打赏
  • 举报
回复
第2张图 是 Y轴 旋转,结果X轴已经 改变, 是因为 视角 的问题 ,只要是 仰视 或 俯视 而不是 平视 ,就会使 X轴 改变位置。
schlafenhamster 2017-01-03
  • 打赏
  • 举报
回复
"一直绕屏幕上固定的X,Y轴旋转" 进一步解释 固定的X,Y轴? 旋转?
newbor 2017-01-03
  • 打赏
  • 举报
回复
我的意思是怎么能让物体能一直绕屏幕上固定的X,Y轴旋转,而不是绕那个轴方向会变的坐标系旋转......
schlafenhamster 2017-01-02
  • 打赏
  • 举报
回复
// glRotatef( angle, x, y, z )函数的作用是 // 将当前坐标系以a( x, y, z )向量为旋转轴旋转angle角度。 // 如 glTranslatef(0, 0, -5); glRotatef(xrot, 1.5, 1.5, 1.5); ////////////////////////////////////////////////////////

void display(void)//显示
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
//
    glTranslatef(0, 0, -3);
    glRotatef(xrot, 1.5, 1.5, 1.5);
//
    cube();
    glutSwapBuffers();
   glPopMatrix();
//
    xrot += 0.5;
// speed control
	Sleep(20);
}
向立天 2017-01-02
  • 打赏
  • 举报
回复
需要用向量来控制 glRotatef不是基于世界坐标的 在世界坐标系中以x,y轴为旋转轴 然后通过向量来旋转 有兴趣的话可以参考一下这篇文章 http://blog.csdn.net/xianglitian/article/details/6590687

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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