为什么旋转不行啊?/关于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);
应该就可以旋转了。