首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

为什么旋转不行啊/关于OPENGL的有关问题

2012-02-14 
为什么旋转不行啊?/关于OPENGL的问题#include GL/glut.hGLfloatrquad0.0,distance50voidcube()voidr

为什么旋转不行啊?/关于OPENGL的问题
#include <GL/glut.h>

GLfloat   rquad   =   0.0,   distance5   =   0;
void   cube   ();
void   revoling   ();

void   display   ()
{
glClear   (   GL_COLOR_BUFFER_BIT   |   GL_DEPTH_BUFFER_BIT     );
glMatrixMode   (   GL_MODELVIEW   );
//glLoadIdentity   ();
//gluLookAt   (   1.0,   1.0,   1.0,   0.0,   0.0,   0.0,   0.0,   1.0,   0.0   );
glLoadIdentity();//   Reset   The   Current   Modelview   Matrix
glTranslatef(distance5,0.0f,0.0f);//   Move   Right   1.5   Units   And   Into   The   Screen   7.0
glRotatef(   rquad,1.0f,0.0f,0.0f);
cube   ();
distance5   +=   0.01;
if   (   distance5   >   4   )   distance5   =-   4;
glutPostRedisplay   ();
rquad   =+   10;
if   (   rquad   >   360.0   )   rquad   =-   360.0;
glutPostRedisplay   ();
glutSwapBuffers   (   );


}

void   reshape   (   int   w,   int   h   )
{
glViewport   (   0,   0,   w,   h   );
glMatrixMode   (   GL_PROJECTION   );
glLoadIdentity   ();
glOrtho   (   -4.0,   4.0,   -4.0,   4.0,   -4.0,   4.0   );


}

void   init   ()
{
glShadeModel   (   GL_SMOOTH   );
glClearColor   (   0.0,   0.0,   0.0,   0.0   );
glColor3f   (   0.0,   0.0,   0.0   );
//glMatrixMode   (   GL_PROJECTION   );
//glLoadIdentity   ();
//glOrtho   (   -6.0,   6.0,   -6.0,   6.0,   -6.0,   6.0   );


}

int   main   (   int   argc,   char**   argv   )
{
glutInit   (   &argc,   argv   );
glutInitDisplayMode   (   GLUT_DOUBLE   |   GLUT_RGB   |   GLUT_DEPTH);
glutInitWindowSize   (   500,   500   );
glutInitWindowPosition   (   0,   0);
glutCreateWindow   (   "CUBE "   );
glutReshapeFunc   (   reshape   );
//glutIdleFunc   (   revoling   );
glutDisplayFunc   (   display   );
init   ();
glutMainLoop   ();
return   0;
}

void   cube   ()
{
glBegin   (   GL_QUADS   );
glColor3f(0.0f,1.0f,0.0f);//   Set   The   Color   To   Green
glVertex3f(   1.0f,   1.0f,-1.0f);//   Top   Right   Of   The   Quad   (Top)
glVertex3f(-1.0f,   1.0f,-1.0f);//   Top   Left   Of   The   Quad   (Top)
glVertex3f(-1.0f,   1.0f,   1.0f);//   Bottom   Left   Of   The   Quad   (Top)
glVertex3f(   1.0f,   1.0f,   1.0f);//   Bottom   Right   Of   The   Quad   (Top)
glColor3f(1.0f,0.5f,0.0f);//   Set   The   Color   To   Orange
glVertex3f(   1.0f,-1.0f,   1.0f);//   Top   Right   Of   The   Quad   (Bottom)
glVertex3f(-1.0f,-1.0f,   1.0f);//   Top   Left   Of   The   Quad   (Bottom)


glVertex3f(-1.0f,-1.0f,-1.0f);//   Bottom   Left   Of   The   Quad   (Bottom)
glVertex3f(   1.0f,-1.0f,-1.0f);//   Bottom   Right   Of   The   Quad   (Bottom)
glColor3f(1.0f,0.0f,0.0f);//   Set   The   Color   To   Red
glVertex3f(   1.0f,   1.0f,   1.0f);//   Top   Right   Of   The   Quad   (Front)
glVertex3f(-1.0f,   1.0f,   1.0f);//   Top   Left   Of   The   Quad   (Front)
glVertex3f(-1.0f,-1.0f,   1.0f);//   Bottom   Left   Of   The   Quad   (Front)
glVertex3f(   1.0f,-1.0f,   1.0f);//   Bottom   Right   Of   The   Quad   (Front)
glColor3f(1.0f,1.0f,0.0f);//   Set   The   Color   To   Yellow
glVertex3f(   1.0f,-1.0f,-1.0f);//   Top   Right   Of   The   Quad   (Back)
glVertex3f(-1.0f,-1.0f,-1.0f);//   Top   Left   Of   The   Quad   (Back)
glVertex3f(-1.0f,   1.0f,-1.0f);//   Bottom   Left   Of   The   Quad   (Back)
glVertex3f(   1.0f,   1.0f,-1.0f);//   Bottom   Right   Of   The   Quad   (Back)
glColor3f(0.0f,0.0f,1.0f);//   Set   The   Color   To   Blue
glVertex3f(-1.0f,   1.0f,   1.0f);//   Top   Right   Of   The   Quad   (Left)
glVertex3f(-1.0f,   1.0f,-1.0f);//   Top   Left   Of   The   Quad   (Left)
glVertex3f(-1.0f,-1.0f,-1.0f);//   Bottom   Left   Of   The   Quad   (Left)
glVertex3f(-1.0f,-1.0f,   1.0f);//   Bottom   Right   Of   The   Quad   (Left)
glColor3f(1.0f,0.0f,1.0f);//   Set   The   Color   To   Violet
glVertex3f(   1.0f,   1.0f,-1.0f);//   Top   Right   Of   The   Quad   (Right)
glVertex3f(   1.0f,   1.0f,   1.0f);//   Top   Left   Of   The   Quad   (Right)
glVertex3f(   1.0f,-1.0f,   1.0f);//   Bottom   Left   Of   The   Quad   (Right)
glVertex3f(   1.0f,-1.0f,-1.0f);
glEnd   ();
}

void   revoling   ()
{
rquad   =+   0.0100;
if   (   rquad   >   360   )   rquad   =-   360;
glutPostRedisplay   ();
}

[解决办法]
少了一个定时器,你可以这样做:
void TimerFunction(int value)
{
// Redraw the scene with new coordinates
glutPostRedisplay();
glutTimerFunc(3,TimerFunction, 1);
}

在mian函数中添加glutTimerFunc(33, TimerFunction, 1);
应该就可以旋转了。

热点排行