week15-2_CMP3_MCI
| #ifdef __APPLE__ | |
| #include <GLUT/glut.h> | |
| #else | |
| #include <GL/glut.h> | |
| #endif | |
| #include <stdlib.h> | |
| static int slices = 16; | |
| static int stacks = 16; | |
| /* GLUT callback Handlers */ | |
| static void resize(int width, int height) | |
| { | |
| const float ar = (float) width / (float) height; | |
| glViewport(0, 0, width, height); | |
| glMatrixMode(GL_PROJECTION); | |
| glLoadIdentity(); | |
| glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0); | |
| glMatrixMode(GL_MODELVIEW); | |
| glLoadIdentity() ; | |
| } | |
| static void display(void) | |
| { | |
| const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; | |
| const double a = t*90.0; | |
| glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
| glColor3d(1,0,0); | |
| glPushMatrix(); | |
| glTranslated(-2.4,1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutSolidSphere(1,slices,stacks); | |
| glPopMatrix(); | |
| glPushMatrix(); | |
| glTranslated(0,1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutSolidCone(1,1,slices,stacks); | |
| glPopMatrix(); | |
| glPushMatrix(); | |
| glTranslated(2.4,1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutSolidTorus(0.2,0.8,slices,stacks); | |
| glPopMatrix(); | |
| glPushMatrix(); | |
| glTranslated(-2.4,-1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutWireSphere(1,slices,stacks); | |
| glPopMatrix(); | |
| glPushMatrix(); | |
| glTranslated(0,-1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutWireCone(1,1,slices,stacks); | |
| glPopMatrix(); | |
| glPushMatrix(); | |
| glTranslated(2.4,-1.2,-6); | |
| glRotated(60,1,0,0); | |
| glRotated(a,0,0,1); | |
| glutWireTorus(0.2,0.8,slices,stacks); | |
| glPopMatrix(); | |
| glutSwapBuffers(); | |
| } | |
| static void key(unsigned char key, int x, int y) | |
| { | |
| switch (key) | |
| { | |
| case 27 : | |
| case 'q': | |
| exit(0); | |
| break; | |
| case '+': | |
| slices++; | |
| stacks++; | |
| break; | |
| case '-': | |
| if (slices>3 && stacks>3) | |
| { | |
| slices--; | |
| stacks--; | |
| } | |
| break; | |
| } | |
| glutPostRedisplay(); | |
| } | |
| static void idle(void) | |
| { | |
| glutPostRedisplay(); | |
| } | |
| const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; | |
| const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
| const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
| const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f }; | |
| const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; | |
| const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; | |
| const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; | |
| const GLfloat high_shininess[] = { 100.0f }; | |
| /* Program entry point */ | |
| #include "CMP3_MCI.h" | |
| CMP3_MCI myMP3; | |
| int main(int argc, char *argv[]) | |
| { | |
| myMP3.Load("2.mp3"); | |
| myMP3.Play(); | |
| glutInit(&argc, argv); | |
| glutInitWindowSize(640,480); | |
| glutInitWindowPosition(10,10); | |
| glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); | |
| glutCreateWindow("GLUT Shapes"); | |
| glutReshapeFunc(resize); | |
| glutDisplayFunc(display); | |
| glutKeyboardFunc(key); | |
| glutIdleFunc(idle); | |
| glClearColor(1,1,1,1); | |
| glEnable(GL_CULL_FACE); | |
| glCullFace(GL_BACK); | |
| glEnable(GL_DEPTH_TEST); | |
| glDepthFunc(GL_LESS); | |
| glEnable(GL_LIGHT0); | |
| glEnable(GL_NORMALIZE); | |
| glEnable(GL_COLOR_MATERIAL); | |
| glEnable(GL_LIGHTING); | |
| glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); | |
| glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); | |
| glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); | |
| glLightfv(GL_LIGHT0, GL_POSITION, light_position); | |
| glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); | |
| glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); | |
| glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); | |
| glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); | |
| glutMainLoop(); | |
| return EXIT_SUCCESS; | |
| }
week15-3_mouse_motion_glTranslatef_glRotatef 先貼上11行GLUT簡單版本 再加上程式碼 #include <GL/glut.h> float angleX[15]={},angleY[15]={};///關節要夠用 void display() { ///glClearColor(1,1,0,1);///黃色背景,可幫你確認模型有沒有黑黑的 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix();///要寫任何程式來畫圖,一定要包起來 glTranslatef(angleX[14]/150.0,-angleY[14]/150.0,0);///拿來當成移動的 glRotatef(angleX[0],1,0,0); glRotatef(angleX[0],0,1,0); glutSolidTeapot(0.3); glPopMatrix(); glutSwapBuffers();///請GLUT把畫面swap送到顯示的地方 } int angleID=0,oldX=0,oldY=0; void mouse(int button,int state,int x,int y){ oldX=x; oldY=y; } void motion(int x,int y){ angleX[angleID]+=x-oldX; angleY[angleID]+=y-oldY; oldX=x; oldY=y; glutPostRedisplay(); } void keyboard(unsigned char key,int x,int y){ if(key=='x') angleID = 14; } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow("week15-3"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMotionFunc(motion); glutMainLoop(); } |
沒有留言:
張貼留言