游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1551|回复: 4

怎么模型旋转这么快

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-3-17 18:38:00 | 显示全部楼层 |阅读模式
我刚学OPENGL不久,试着根据例子改了个立方体的线筐旋转的程序,但旋转速度好象太快了,是我编的有问题还是就这样,代码如下
#include <GL/glut.h>
#include <stdlib.h>
static GLfloat i=0.0;

void init(void)
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_FLAT);
}

void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glRotatef(i,0.0,1.0,0.0);
   i=i+1.0;/*控制旋转角度*/
   if(i>360.0)
   i=i-360.0;
   glutWireCube (1.0);
   
         
glutSwapBuffers();
glutPostRedisplay();
   
   
   
}

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
   }
}






int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
   glutInitWindowSize (500, 500);
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glLoadIdentity ();            
         
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   glScalef (1.0, 2.0, 1.0);     
   glutMainLoop();
   return 0;
}

核心部分就是
void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT);
   glColor3f (1.0, 1.0, 1.0);
   glRotatef(i,0.0,1.0,0.0);
   i=i+1.0;/*控制旋转角度*/
   if(i>360.0)
   i=i-360.0;
   glutWireCube (1.0);
   
         
glutSwapBuffers();
glutPostRedisplay();
   
   
   
}

请各位帮忙看一下,谢了

0

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2006-3-17 18:51:00 | 显示全部楼层

Re:怎么模型旋转这么快

i=i+1.0;/*控制旋转角度*/



不要累加, 上一次旋转与下一次旋转有累计效应. 再没有开头执行glLoadIdentity()的情况下,i是一个定值就可以旋转了.

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-3-17 19:17:00 | 显示全部楼层

Re:怎么模型旋转这么快

我倒,忘记开双缓存了,开了之后效果还行,至少不是什么都看不清楚了,但速度还是稍微有点快,谢了DMC,看你的名字是DMC的FAN把

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-3-17 19:22:00 | 显示全部楼层

Re:怎么模型旋转这么快

谢了DMC,我搞成累加主要是REDBOOK上说如果重复较小的角度存在舍入误差,太快原来是距阵在不停叠加

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2006-3-18 16:40:00 | 显示全部楼层

答案,有 2种方法可以解决.


{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);

glLoadIdentity();//先回到原始角度
glRotatef(i,0.0,1.0,0.0);//转
i=i+1.0f;//然后,角度发生变化,这样, i 等于“角度”
if(i>360.0f) i-=360.0f;

glutWireCube (1.0);


{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);

glRotatef(i,0.0,1.0,0.0);//每次旋转 1度.所以这时, i 等于旋转 “角速度”
glutWireCube (1.0);

①是“角度”
②是“角速度”

不一样了吧?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 22:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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