游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4219|回复: 7

在opengl中的物体旋转问题

[复制链接]

13

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2005-6-21 11:26:00 | 显示全部楼层 |阅读模式
在opengl中,用命令glRotated( 90, 0, 1, 0)使物体旋转到90度后,用鼠标上下移动
用命令glRotated( 10, 1, 0, 0)来使物体上下旋转(沿x轴旋转),但物体并不是这么旋转的,而是左右旋转了(沿z轴旋转)
这个会不会是用命令glRotated( 90, 0, 1, 0)旋转的时候,把这个物体的坐标轴也给旋转了阿?
如果是这样,该如何解决呢?

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-6-21 11:30:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

http://bbs.gameres.com/showthread.asp?threadid=31053

13

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-6-23 09:36:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

我的旋转咋还是不行呢,是不是哪里出问题了啊,帮忙看一下了,谢谢
鼠标移动对应的主要程序如下:
            dx=xPos1-xPos;         //dx表示鼠标在x方向上的移动量
            dy=yPos1-yPos;         //dy表示鼠标在y方向上的移动量
            xPos=xPos1;
            yPos=yPos1;
            InvalidateRect(NULL,FALSE);

下面是RenderScene函数的程序   这个就是图形显示程序

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(matrix);      //matrix已经初始化了
if(dx!=0)
{
        glRotated( dx, 0, 1, 0);
}
if(dy!=0)
{
        glRotated( dy, 1, 0, 0);
}
glGetFloatv(GL_MODELVIEW_MATRIX,matrix);
glCallList(1);         

8

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2005-6-23 11:18:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

你判断一下你的两个条件是不是都被满足了,dx!=0,dy!=0;

13

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-6-23 11:22:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

如果两个条件都满足了就不行,只有一个条件满足才行吗?

0

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-6-23 17:19:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

老大,你的这个问题是出现了gimbal lock(也就是万向锁),也就是物体的旋转轴出现了重合,旋转矩阵失去了一个自由度,要解决它,就要用quaternion(四元数)旋转来构造旋转矩阵,建议你看看www.gamedev.net上的文章"quaternion powers"上面解释了四元数,并给出了两个例子,用opengl编的,看了就会明白的。

4

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2005-6-24 23:30:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

你把你的鼠标调用函数整个发一下(包括list),有可能你的鼠标旋转和glRotated(......)混合产生的效果,如果你的list中有glRotate的话,这个你必须检查一下。因为opengl的执行实际上就象码积木一样。

13

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-6-27 14:57:00 | 显示全部楼层

Re:在opengl中的物体旋转问题

好像四元数能解决这个问题,但上面写的四元数不是很明白,nehe最后一个的程序的计算太复杂了,没明白,谁知道四元数是怎么回事啊,给我讲一讲啊,谢谢了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 05:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表