#include #include #include #include #include #include #include "glst.h" #include "glstrb.h" #include "stcontrol.h" static GLfloat spin = 132.0; void idlef(); void init(void) { GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glClearColor(0.0, 0.0, 0.0, 0.0); glClearAccum(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); light_position[0] = -1.0; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); glEnable(GL_DEPTH_TEST); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*glstToggle(True);*/ while(glstLoopRender()) { glPushMatrix(); glRotatef(spin, 0.0, 0.0, 1.0); glRotatef(spin, 0.0, 1.0, 0.0); glColor3f(1.0, 1.0, 1.0); glutSolidCube(2.0); glPopMatrix(); } glFlush(); glutSwapBuffers(); } void spinDisplay(void) { spin = spin + 2.0; if(spin > 360.0) spin -= 360.0; StControlGlutIdleFunc(); glutPostRedisplay(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(80.0, (GLfloat) w/ (GLfloat) h, 1.0, 200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -5.0); glutPostRedisplay(); } void mouse(int button, int state, int x, int y) { switch(button) { case GLUT_LEFT_BUTTON: if(state == GLUT_DOWN) glutIdleFunc(spinDisplay); break; case GLUT_MIDDLE_BUTTON: if(state == GLUT_DOWN) glutIdleFunc(StControlGlutIdleFunc); break; default: break; } } int main(int argc, char ** argv) { glstrbAutoRegister(); glstInit(GLSTRB); glstSetValuef(GLST_XDISPLACEMENT, 0.1); glstSetValuei(GLST_MODE, GLSTRB_ACCUM); StControlInit(&argc, argv, STCONTROLGLUT); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_ACCUM | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutIdleFunc(StControlGlutIdleFunc); glutMainLoop(); return 0; }