Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Project 3DPrim

Project 3DPrim

This project is simple graphic so it used basic Geometry shape you can Right Click for change to Other Shape and Left Click for speed Rotating of Shape...

Phonesackda

March 01, 2013
Tweet

Other Decks in Science

Transcript

  1. ຫວຂ ົ ໍ້: ການແຕມຮູບ ້ Shape ຕາງໆໃຫສາມາດໜຸນ ່ ້ ແລະ

    ປຽນຮູບຮາງໄດດວຍຟງຊນ ່ ່ ້ ້ ັ ັ້ Mouse Click. ອາຈານສອນ: ອາຈານ ນຣນກຸນ ີ ັ ຫອງ ້ CS9 ຊສະມາຊກກຸມ ື ິ ່ ່ 1.ທ. ພນສກດາ ົ ັ ສຸລຍະວງໃສ ິ ົ 2.ທ. ເພດຕອງ ັ ກອງແພງຕາ 3.ນ. ເມະ ວຽງປນຍາ ັ Presenting OpenGL ບດສະເໜວຊາ ົ ີ ິ Computer Graphic
  2. I. ຄວາມໝາຍຂອງ OpenGL • Application Programming Interface (API) ສາລບຄວບຄຸມ ໍ

    ັ GPU • ຜູໃຊ ້ ້OpenGL ສາງຮູບຮາງວດຖຸ ້ ່ ັ (ເມດ ັ ເສນ ັ້ ແລະຮູບຫາຍຫຽມ ຼ ຼ ) ຜານທາງ ່ OpenGL • OpenGL ຈະເຮດໜາທສາງພາບໃສ ັ ີ ້ ້ ່ ່ frame buffer • ການໃຊໂປແກມທມການໂຕຕອບທນທ ້ ້ ຼ ຼ ີ ີ ັ ີ ່ (interactive) ແລະ ໂປແກມທມພາບເຄອນເໜງ ຼ ຼ ີ ີ ື ັ ່ ່
  3. III. ໂຄງສາງ ້ • ພາກ​ສວນ ່ Header file • ພາກສວນການການດຄາເລມຕນ

    ່ ່ ໍ ົ ີ ົ ່ ້ void init() • ພາກສວນການການດ ່ ໍ ົ void Display() • ພາກສວນຫກ ່ ຼັ void main()
  4. III. ພາກສວນອະທບາຍ ່ ິ Code • ພາກສວນ ່ Header file

    #include <stdlib.h> #include <stdio.h> #include <math.h> #ifdef __APPLE__ #include <GLUT/glut.h> #else #include <GL/glut.h> #endif #define ROT_INC 0.1 void drawSphere(void); static GLfloat g_rotate = 0; static GLfloat g_rotInc = ROT_INC; static void (*drawPrimP)(void) = drawSphere;
  5. • ພາກສວນການດ ່ ໍ ົ void Display() void display(void) {

    glClear( GL_COLOR_BUFFER_BIT ); /* set matrix mode to modelview */ glMatrixMode(GL_MODELVIEW); /* save matrix */ glPushMatrix(); /* global rotation */ glRotatef(g_rotate,1.0,1.0,1.0); /* draw the geometry */ (*drawPrimP)(); /* restore matrix */ glPopMatrix(); /* swap buffers to display the frame */ glutSwapBuffers(); }
  6. • ພາກສວນແຕມຮູບ ່ ້ void drawSphere(void) { glutWireSphere(6.0,20,20); } void

    drawCube(void) { glutWireCube(6.0); } void drawCone(void) { glutWireCone(6.0, 8.0, 10, 20); } void drawTorus(void) { glutWireTorus(1.0, 6.0, 10, 20); } void drawIcos(void) { glPushMatrix(); glScalef(6.0,6.0,6.0); glutWireIcosahedron(); glPopMatrix(); } void drawTeapot(void) { glutWireTeapot(6.0); }
  7. void setPrim(int value) { switch(value) { case 1: drawPrimP =

    drawSphere; break; case 2: drawPrimP = drawCube; break; case 3: drawPrimP = drawCone; break; case 4: drawPrimP = drawTorus; break; case 5: drawPrimP = drawIcos; break; case 6: drawPrimP = drawTeapot; break; default: fprintf(stderr, "3dPrim: unknown menu option %d\n", value); break; }} • ພາກສວນການຕງຄາ ່ ່ ັ ້ ລາດບຂອງເມນູ ໍ ັ
  8. • ຟງຊນປຽນຄາຄວາມກວາງ ັ ັ້ ່ ່ ້ ແລະ ລວງສູງໃນເມອເລອກຮູບໃໝ ື

    ື ່ ່ void myReshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( 60.0, (GLdouble)w/(GLdouble)h, 0.1, 40.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); }
  9. • ການອອກຈາກໂປຣແກຣມ void myKey(unsigned char k, int x, int y)

    { switch (k) { case 'q': case 'Q':exit(0); break; default: printf("Unknown keyboard command \'%c\'.\n", k); break; } }
  10. • ຟງຊນເຫດການເມອຜູໃຊ ັ ັ ື ້ ່ ້ ້ Click

    Mouse void myMouse(int btn, int state, int x, int y) { if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) g_rotInc += ROT_INC; if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) g_rotInc = ROT_INC; glutPostRedisplay(); } void myIdleFunc(void) { g_rotate += g_rotInc; glutPostRedisplay(); }
  11. • ຟງຊນ ັ ັ້ Main (); int main(int argc, char

    **argv) { glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowSize(500, 500); glutCreateWindow("3D Shapes Test"); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutIdleFunc(myIdleFunc); glutKeyboardFunc(myKey); glutMouseFunc(myMouse); glutCreateMenu(setPrim); glutAddMenuEntry("Sphere", 1);
  12. ຟງຊນ ັ ັ້ Main (); (ຕໍ່) glutAddMenuEntry("Cube", 2); glutAddMenuEntry("Cone", 3);

    glutAddMenuEntry("Torus", 4); glutAddMenuEntry("Icosahedron", 5); glutAddMenuEntry("Teapot", 6); glutAttachMenu(GLUT_RIGHT_BUTTON); glClearColor(1.0, 1.0, 1.0, 1.0); glColor3f(0.0, 0.0, 0.0); glutMainLoop(); return 0; }