O pen gl
- 1. ຍຈຣາງຄາຌ OPenGL
຺
• ວາາຌລວຌ: ວາາຌ ຌຢຌກຸຌ ລຄຎຨະຽລຈ
ີ ັ ິ ີ
• ຆໃ ກູຠ: GLbs ວຄ 4CS3
ື ໃ ໄ
• 1. ຌ. ໜຸຄໜິຄ ກຈຉວາລາິ ິ
• 2. . ພຸຈະຌ ັ
• 3. . ຌະຽລຠ
ັ ີ
- 2. I. າຠຽຎັຌຠາ.
ລະຍຍາວຈຂວຄ OpenGL, ລະຍຍ 1.0, ຊກຎວງ
ັ ໍ ິ ັ ຶ ໃ
ວວກຠາຽຠໃ ວຽຈວຌຠຄກວຌຎີ 1992 ຈງ Mark Segal
ື ື ັ
ັ ັໄ ໃ ັໄ
ຣະ Kurt Akeley. ຌຍຉຄຉຌຌຠາ, OpenGL ແຈຽຎັຌ ໄ
ຍາຄວກາຈຂະງາງ ຈງກາຌຎວງຠຣຌເຠຂວຄ
ໄ ໃ ີ ຸໄ ໃ
ລະຽພາະ OpenGL ຣະ ຉໃ ໍຉາຌໃ ີຂະງາງຽຣາເຠ ໃ ໄ
ລາຠາຈຽພໃ ີຠຽຉຠແຈມາຄຄາງຈາງແຈຣາງຣກວກລວຌ. ຉ ໃ
ີ ໄ ໃ ໃ ໄ ັ ັ
ຣະລະຍຍເຠຂວຄ OpenGL tends, OpenGL ຽຎີຈຨູຍ
ັ ໃ
ພາຍ ຠຌຣະາຄພາລາ,
ໃ ໃ API ົາງຽີລາຣຍ ໍ ັ
rendering ຨູຍພາຍວຠພິຽຉີ 2D 3D ຊກຌາເຆມາຄ ື ໍ ໄ ໃ
ກາຄຂາຄ
ໄ
ຨູຍພາຍ Animation ຠຌຽກຈາກກາຌຂຼຌຈຉາຄໂ
ໃ ີ ໃ
ຈງກາຌເຆຎະລຠຎະລາຌຈລຉາຄກາຌຽຎັຌຨູຍາຣວຄໃ ີ
ໄ ຺ ີ ໃ ໍ
ລາຠາຈໝຸຌເຈ ໄ
- 3. II. ໃ ີຠາຂວຄຈ
ີໄ
ຄລາຄຂວຄ OpenGL ເຌກາຌຂຼຌ Project ຌຎະກວຍຠ ີ 4
ໄ
ພາກລຌ:
ໃ ື
• ພາກລຌ Header file
ໃ
• ພາກລຌກາຌກາຌຈາຽຣໃ ຠຉຌ void init()
ໃ ໍ ຺ ໃ ີ ຺ໄ
• ພາກລຌກາຌກາຌຈ void Display()
ໃ ໍ ຺
• ພາກລຌົກ void main()
ໃ ັ
- 4. 1. ພາກລຌ Header file
ໃ
#include <GL/glut.h>
2. ພາກລຌກາຌກາຌຈາຽຣໃ ຠຉຌ void init()
ໃ ໍ ຺ ໃ ີ ໄ຺
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0); // ກາຌຈລຂວຄ
ໍ ຺ ີ
ລະຈຄຏຌ
ໍ ຺
}
- 5. 3. ພາກລຌກາຌກ າຌຈ void Display()
ໃ ຺
void display (void)
{
glClear (GL_COLOR_BUFFER_BIT); // ໍາລໃຄຣຶຍລີເຌຍ ັຍຽຟີ ລໃ ີຠີ
ັ ີ
ຠາກວຌຣໃ ຄກາຌ ຺ຈລີເໝຉາຠໃ ີກາຌ ຺ຈ
ໃ ໄ ຶ ໍ ໃ ໍ
glClearColor(1.0, 1.0, 1.0, 0.0); //ລີ ໍາວິຈຂວຄຨູຍ
glPushMatrix();
glutSolidTeapot(0.5); // Draw the Teapot
glPopMatrix();
glutSwapBuffers();
}
- 6. void keyboard (unsigned char key, int x, int y)
{
switch (key)
{
case 'r': // ີ r
glColor3f(1.0, 0.0, 0.0); // ຽຎັຌລຈຄ
ີ
glutPostRedisplay();
break;
case 'g': // ີ g
glColor3f(0.0, 1.0, 0.0); // ຽຎັຌລຂຼ
ີ
glutPostRedisplay();
break;
- 7. case 'b': // ີ b
glColor3f(0.0, 0.0, 1.0); // ຽຎັຌລຟາ
ີ ໄ
glutPostRedisplay();
break;
case 'p': // ີ p
glColor3f(0.98, 0.04, 0.70); // ຽຎັຌລຍ ີ ຺
glutPostRedisplay();
break;
case 'o': // ີ o
glColor3f(0.98, 0.625, 0.12); // ຽຎັຌລລຠ ີ ຺ໄ
glutPostRedisplay();
break;
- 8. case 'm': // ີ m
glColor3f(1.0, 0.0, 1.0); // ຽຎັຌລຠຄ
ີ ໃ
glutPostRedisplay();
break;
case 'c': // ີ c
glColor3f(0.0, 1.0, 1.0); // ຽຎັຌລີຟາກ ໃ
ໄ
glutPostRedisplay();
break;
case 'e': // ີ e
exit(0); // ວວກ
break;
default:
break;
}
}
- 9. 4. ພາກລຌົກ void main()
ໃ ັ
void main (int argc, char **argv) //ກາຌຈາຽຣໃ ຠຉຌເຌGLUT
ໍ ຺ ໃ ີ ຺ໄ
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE); //ກາຌຈ ໍ ຺
ຍຍເຌກາຌລະຈຄຏຌຽິຄໜາໍ
຺ ໄ
glutInitWindowSize(500, 500); //ກາຌຈຂະໜາຈຂວຄໜາລະຈຄຏຌ
ໍ ຺ ໄ ໍ ຺
glutInitWindowPosition(50, 50); //ຉາໜຄຂວຄໜາລະຈຄຏຌ
ໍ ໃ ໄ ໍ ຺
glutCreateWindow ("Keyboard function : r=red, g=green, b=blue,
ໍ ຺ ໄ
p=ping, o=orange, c=cyan, e=exit"); //ກາຌຈຂໍາຠໃ ິລະຈຄຽິຄ
title bar
glutDisplayFunc(display); //ລະຈຄກຢາຍຟິ ກວວກາຄພາຍ ໍ
glutKeyboardFunc (keyboard);
glutMainLoop (); //ລະຈຄກຢາຍຟິ ກວວກາຄພາຍຌຨວຍຌກາະ
ໍ ຺ ຺ ໃ
ຎິຈໜາໍ
ໄ
}