游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2210|回复: 8

问大家一个关于旋转的问题

[复制链接]

5

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2005-10-31 21:51:00 | 显示全部楼层 |阅读模式
我现在有一个杯子的数据,可以通过读取然后将它显示出来,但它的坐标的中心位置不在世界坐标系的原点,各个坐标点的位置大概在X(-60,60),Y(-320,-70) Z(160,370),虽然画出来了,但是我想实现绕这个杯子中心旋转的功能,可是我画这个图形的时候,都是用的它原始的点,没有进行坐标变换,而glRotate()函数要让它绕这个杯子中心旋转的话,好像不能行,因为这个函数只能绕一个看矢量,这个矢量的一个点默认为是(0,0,0),另一个点是设置的坐标。请大家指点一下要怎样实现才好?

0

主题

13

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2005-11-1 00:32:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

可不可以平移到原点呢?我刚学的,不知道可不可以....

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-11-1 01:10:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

应该可以的。

glRotate(旋转角度,0,1,0);//先旋转
glTranslatef(0,195, - 265);//然后,移动。
//移动量为 X(-60,60)中点=0,
//Y(-320,-70)中点=-195, Z(160,370)中点=265,
杯子();

试试看看。^o^

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-11-1 08:25:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

首先计算杯子的中心点(x',y',z')
接着把杯子平移到原点,中心与原点重合。
旋转杯子。
再把杯子平移回中点点所在座置。

gltranslate(x',y',z');
glRotate(angle,0,1,0);
glTranslatef(-x',-y',-z');
DrawObj();

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-11-1 12:22:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

楼上,移动两次是不对的。
第一个TRANSLATE是错误的。

比如,杯子中心在(0,0,10)

你先把它移动到(0,0,10)为什么要移动??????
旋转,
再移动到(0,0,-10)

它本来就在(0,0,10)了,你再移动到(0,0,10),
它就在(0,0,20)了??????
旋转完,移动到(0,0,-10),那它还是在(0,0,10),不是原点啊!!!

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-11-1 15:49:00 | 显示全部楼层

Re: Re:问大家一个关于旋转的问题

snhun: Re:问大家一个关于旋转的问题

楼上,移动两次是不对的。
第一个TRANSLATE是错误的。

比如,杯子中心在(0,0,10)

你先把它移动到...


如果你了解OpenGL的平移,旋转等操作都是从下往上执行的话,你不会发表这样的看发。


gltranslate(x',y',z');         //第三步
glRotate(angle,0,1,0);    //第二步
glTranslatef(-x',-y',-z');   //第一步

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2005-11-1 18:07:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

从下往上执行??????
真没听说过。
我编程序的时候,都是从上往下的。

glRotate(90,0,1,0);
glTranslatef(10,0,0);//先旋转90度,在旋转后的MATRIX上移动。

glTranslatef(10,0,0);
glRotate(90,0,1,0);//先移动到(10,0,0),然后原地旋转90度。

是经过实验的。
怎么可能是从下往上执行?
到底谁是不会?

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-11-2 14:53:00 | 显示全部楼层

Re:问大家一个关于旋转的问题

从下往上执行??????
真没听说过。
我编程序的时候,都是从上往下的。

glRotate(90,0,1,0);
glTranslatef(10,0,0);//先旋转90度,在旋转后的MATRIX上移动。

glTranslatef(10,0,0);
glRotate(90,0,1,0);//先移动到(10,0,0),然后原地旋转90度。

是经过实验的。
怎么可能是从下往上执行?
到底谁是不会?
//=================================================

OK,可能是因为我们看题的角度不同,才会产生分歧。
我在作变换的时候用的是世界坐标,原点在屏幕中心,不会随平移操作而移动;
你用的是局部坐标(local cord):原心始终在物体中心,跟随物体移动。才会有“原地旋转90度”这种说法。
在坐标这个问题上,我们都没有错。

但对对于楼主的问题,我一直认为我的思想是正确的。要正明我们谁是对的也很容易,我们各自用自已的算法,写一个程序来证实一下就可以了。两天内上传各自的代码,让网友做平判。

为了方便编程作以下规定:
1、用一个中心处于世界坐标P(1.0f,1.0f,1.0f)处,边长为2的立方体来代替那个杯子。
2、立方体要实现以P点为中心的水平旋转。
3、不要用glut中的立方体函数,每个顶点的数据自已计算出来。

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-11-2 16:09:00 | 显示全部楼层

Re: 问大家一个关于旋转的问题

OK, I have finish.

sf_20051121693.rar

46.87 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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