void mainloop() { const int MAXOBJ = 30; AniObj obj[MAXOBJ]; //定义对象数组 int n; for (n = 0; n < MAXOBJ; ++n) { initobj(&obj[n]); //初始化 } for ( ; is_run(); delay_fps(60) ) { for (n = 0; n < MAXOBJ; ++n) { updateobj(&obj[n]); //更新位置 } cleardevice(); for (n = 0; n < MAXOBJ; ++n) { drawobj(&obj[n]); //绘画 } } for (n = 0; n < MAXOBJ; ++n) { releaseobj(&obj[n]); //释放 } }
static void draw(void) { static char frbuf[80] = ""; dojoy(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); if (fog) glEnable(GL_FOG); else glDisable(GL_FOG); glPushMatrix(); calcposobs(); gluLookAt(obs[0], obs[1], obs[2], obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], 0.0, 0.0, 1.0); drawbase(); drawobj(); glColor3f(1.0, 1.0, 1.0); glDisable(GL_TEXTURE_2D); glPushMatrix(); glTranslatef(lightpos[0], lightpos[1], lightpos[2]); glCallList(lightdlist); glPopMatrix(); glPopMatrix(); glDisable(GL_DEPTH_TEST); glDisable(GL_FOG); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glColor3f(0.0f, 0.3f, 1.0f); if (showcheckmap) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, checkid); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex2i(10, 30); glTexCoord2f(1.0f, 1.0f); glVertex2i(10 + 90, 30); glTexCoord2f(0.0f, 1.0f); glVertex2i(10 + 90, 30 + 90); glTexCoord2f(0.0f, 0.0f); glVertex2i(10, 30 + 90); glEnd(); glDisable(GL_TEXTURE_2D); glBegin(GL_LINE_LOOP); glVertex2i(10, 30); glVertex2i(10 + 90, 30); glVertex2i(10 + 90, 30 + 90); glVertex2i(10, 30 + 90); glEnd(); glRasterPos2i(105, 65); printstring(GLUT_BITMAP_HELVETICA_18, "Plane Texture Map"); } if (showreflectmap) { glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, reflectid); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex2i(540, 30); glTexCoord2f(1.0f, 1.0f); glVertex2i(540 + 90, 30); glTexCoord2f(0.0f, 1.0f); glVertex2i(540 + 90, 30 + 90); glTexCoord2f(0.0f, 0.0f); glVertex2i(540, 30 + 90); glEnd(); glDisable(GL_TEXTURE_2D); glBegin(GL_LINE_LOOP); glVertex2i(540, 30); glVertex2i(540 + 90, 30); glVertex2i(540 + 90, 30 + 90); glVertex2i(540, 30 + 90); glEnd(); glRasterPos2i(360, 65); printstring(GLUT_BITMAP_HELVETICA_18, "Sphere Texture Map"); } glDisable(GL_TEXTURE_2D); glRasterPos2i(10, 10); printstring(GLUT_BITMAP_HELVETICA_18, frbuf); glRasterPos2i(360, 470); printstring(GLUT_BITMAP_HELVETICA_10, "Ray V1.0 Written by David Bucciarelli ([email protected])"); if (help) printhelp(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); updatemaps(); glutSwapBuffers(); Frames++; { GLint t = glutGet(GLUT_ELAPSED_TIME); if (t - T0 >= 2000) { GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; sprintf(frbuf, "Frame rate: %f", fps); T0 = t; Frames = 0; } } }