如何让opengl旋转时绕世界坐标系中的任意一条直线旋转,而不是固定的坐标轴?

Black_Friend 2019-06-14 02:48:53
以前的时候有两种方法一直在用:
1、 glRotatef(-rotate_z, 0, 0, 1);
glTranslatef(position_x, position_y, position_z);
这个的效果是围绕视点进行旋转;
2、glTranslatef(position_x, position_y, position_z);
glRotatef(-rotate_z, 0, 0, 1);
这个是围绕物体的中心进行旋转,




我现在想让它绕着世界坐标系中一条直线进行旋转,我该如何操作?
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Black_Friend 2019-06-20
  • 打赏
  • 举报
回复
引用 6 楼 weixin_44628052 的回复:
那你这个方法差了多远?要不你试试把平移和旋转换顺序?
我先去学一下opengl…我之前只看过一点dorect3d…

目前这个还算可以我通过两个平移将它转换回来了。
gluLookAt(x, y, z, xx, yy, zz, 0, 1, 0);
glTranslatef(x,y,0);
glRotatef(-rotate_x, 1, 0, 0);
glRotatef(-rotate_y, 0, 1, 0);
glRotatef(-rotate_z, 0, 0, 1);
glTranslatef(-x,-y,0);
但是现在又碰到一个问题,就是:我在通过鼠标滑轮控制物体按照鼠标方向移动,但是我求得的移动距离dx,dy在三维坐标系中的分量不正确,导致移动的时候,各个方向不对应!看看老哥你有没有什么思路?
Black_Friend 2019-06-19
  • 打赏
  • 举报
回复
其实我这样实现过一次可以绕着空间中一条z为-120的轴进行旋转:
gluLookAt(position_x, position_y, position_z, position_xx, position_yy, position_zz, 0, 1, 0);
glRotatef(-rotate_x, 1, 0, 0);
glRotatef(-rotate_y, 0, 1, 0);
glRotatef(-rotate_z, 0, 0, 1);
glTranslatef(0,0,-120);
但是它的旋转中心并不是我要的旋转中心。
Black_Friend 2019-06-19
  • 打赏
  • 举报
回复
引用 3 楼 weixin_44628052 的回复:
物体到直线的垂足
不过我不太了解你上面用到的opengl里的函数参数表示什么,如果你说明白会更好

rotatef是绕着对应的坐标轴(z)旋转rotate_z角度
translatef是在x方向上平移position_x,y方向上平移position_y.....
DestinedToDie 2019-06-19
  • 打赏
  • 举报
回复
directx…打错了
DestinedToDie 2019-06-19
  • 打赏
  • 举报
回复
那你这个方法差了多远?要不你试试把平移和旋转换顺序? 我先去学一下opengl…我之前只看过一点dorect3d…
DestinedToDie 2019-06-18
  • 打赏
  • 举报
回复
物体到直线的垂足 不过我不太了解你上面用到的opengl里的函数参数表示什么,如果你说明白会更好
Black_Friend 2019-06-18
  • 打赏
  • 举报
回复
引用 1 楼 weixin_44628052 的回复:
能把绕直线旋转的基点求出来吗


你指的基点是这条直线的两个端点么?
DestinedToDie 2019-06-14
  • 打赏
  • 举报
回复
能把绕直线旋转的基点求出来吗

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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