游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3918|回复: 5

旋转并不容易!

[复制链接]

4

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2005-6-16 16:14:00 | 显示全部楼层 |阅读模式
我很困惑,如何控制一个物体始终让它绕自身坐标轴旋转?
我是这么做的:
……
glRotatef(DY,  0 ,1 ,0) ;
glRotatef(DX,  1 ,0 ,0) ;
glRotatef(DZ,  0 ,0  1) ;
Draw() ;
……
但是旋转几次后,我发现,旋转轴就乱了,原来控制物体绕自身x轴旋转动方向键,现在却使它
绕别的轴(不一定是它自身的坐标轴,但肯定是绝对坐标轴)旋转。
这是为什么?

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-6-16 18:00:00 | 显示全部楼层

Re:旋转并不容易!

glRotate改变了modelview matrix
modelview matrix大多数情况下每次一开始重画时都应被归一: glLoadldentity();

4

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2005-6-16 18:42:00 | 显示全部楼层

Re: 旋转并不容易!

忘了说明了,在我调用旋转函数之前,我已经调用glLoadIdentity()了
,但是问题依然存在

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2005-6-22 11:09:00 | 显示全部楼层

Re:旋转并不容易!

你的问题是不是这个。
http://bbs.gameres.com/showthread.asp?threadid=31377

0

主题

16

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2005-6-22 21:00:00 | 显示全部楼层

Re:旋转并不容易!

openGL没用过,不过旋转应和DX中一样,如要围绕本地Y轴旋转,正确做法应该先得旋转矩阵,然后通过坐标系转换为世界坐标系中的矩阵。我在DX中让人物拐弯是先让人物旋转后再移到它应该在的世界坐标位置,在渲染后单位化世界坐标系(3步)。由于在用旋转矩阵设置渲染状态,实际是改变了世界坐标系,而人物实际上一直在坐标原点。旋转场景中任意物体是最复杂的,但DX有一个围绕任意轴旋转的函数,只要你找到任意物体要旋转的轴在世界坐标系的位置,同时还要将它移到原点,旋转,然后再移回去就可以了。

下面是我的游戏场中一个水车的旋转代码
////////////////////初始化水车旋转的相关变量//////////////////////
               ComUnitV(&h_shuiche);//水车旋转用

        shuicheAngle = 0.0f;//旋转角度

        shuicheL=D3DXVECTOR3(-1,0,0);//水车旋转相对轴向
        linshi=D3DXVECTOR3(-7058.9f,350.0f,4801.0f);//水车的世界坐标位置

        shuicheLen=D3DXVec3Length(&linshi);


//////////////////////旋转水车//////////////////////////////////////

if(i==9)
{
        D3DXMATRIX mat1;
        D3DXMATRIX mat3;                       
                D3DXVECTOR3 h1
        D3DXMatrixRotationAxis(&mat3,&h_shuiche,shuicheAngle);

                                        h1.x=linshi.x*mat3._11+linshi.y*mat3._12+linshi.z*mat3._13+mat3._14;
                                        h1.y=linshi.x*mat3._21+linshi.y*mat3._22+linshi.z*mat3._23+mat3._24;
                                        h1.z=linshi.x*mat3._31+linshi.y*mat3._32+linshi.z*mat3._33+mat3._34;
        h1/=D3DXVec3Length(&h1);
        h1*=shuicheLen;
        h1-=linshi;
        D3DXMatrixTranslation(&mat1,h1.x,h1.y,h1.z);
        D3DXMatrixMultiply(&mat3,&mat1,&mat3);
        m_pD3DDevice->SetTransform( D3DTS_WORLD, &mat3 );       

        m_pMesh->DrawSubset(i);

        D3DXMatrixIdentity(&mat1);
        D3DXMatrixIdentity(&mat3);
        m_pD3DDevice->SetTransform(D3DTS_WORLD, &mat1);

        shuicheAngle = ((int)(0.06*timeGetTime())%360)*PI1;
        if(shuicheAngle>2*D3DX_PI)
        {
               shuicheAngle = 0.0f;
        }

1

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2006-7-17 00:12:00 | 显示全部楼层

Re:旋转并不容易!

能否解释一下第一行代码           ComUnitV(&h_shuiche);//水车旋转用
  是什么意思?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 23:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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