opengl实现一个点绕另一个点旋转时遇到了一个问题

zhaoyanbai 2009-11-15 12:16:47
把问题局限在XY平面。Z轴先忽略不计。
先设一个点O(3,3)另一个点A(5,5)
现在要实现点A绕O旋转
在图形学的书上说的是只要三步:
1.将A按向量(-3,-3)移动到 A'
2.绕圆心旋转A'到A''
3.将A''再按向量(3,3)移动
所得到的结果就是A绕O旋转的结果。
在我看来程序应该这样写

static float an = 0.0;
an += 1.0f;
glPushMatrix();
glTranslatef(-3, -3, 0);
glRotatef(an, 0, 0, 1);
glTranslatef(3, 3, 0);
glBegin(GL_POINTS);
glColor3f(0,0,1);
glVertex3f(5, 5, 0);
glEnd();
glPopMatrix();

但事实上是不行的。
但当我这样写之后就可以了。(就是将1、3步交换顺序)

static float an = 0.0;
an += 1.0f;
glPushMatrix();
glTranslatef(3, 3, 0);
glRotatef(an, 0, 0, 1);
glTranslatef(-3, -3, 0);
glBegin(GL_POINTS);
glColor3f(0,0,1);
glVertex3f(5, 5, 0);
glEnd();
glPopMatrix();


请问这是为什么?谢谢各位帮忙分析一下~
...全文
473 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyanbai 2009-11-21
  • 打赏
  • 举报
回复
看了红宝书之后,我现在知道了~

其实楼上的各位说得还是有点不对~~~
最根本的一点是有的图形学上的书是用点v(1x4)去乘矩阵M(4x4)即v'= vM
而OPENGL做的恰恰相反是用变换矩阵M(4x4)去乘点v(4x1)即v' = Mv
所以才会出现上面的情况~

不过谢谢大家~
VR_Lab 2009-11-18
  • 打赏
  • 举报
回复
楼上正解
wuhuwy 2009-11-17
  • 打赏
  • 举报
回复

opengl移动的是坐标系,而不是物体。它是在移动后的坐标系来绘制,跟直接移动物体刚好相反。
第一段代码应该把移动方向换一下
ypbsyy 2009-11-16
  • 打赏
  • 举报
回复
opengl移动的是坐标系,而不是物体。
你第一段代码把方向弄反了

19,472

社区成员

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

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