บทที่ 1 แนะนำ OpenGL ( Introduction to OpenGL )

Preview:

DESCRIPTION

รายวิชา 729441 Computer Graphics. บทที่ 1 แนะนำ OpenGL ( Introduction to OpenGL ). OpenGL (Open Graphics Library) เป็นซอฟต์แวร์ไลบราลี (Software Library) ที่ใช้ติดต่อกับฮาร์ดแวร์เพื่อการแสดงภาพกราฟิก - PowerPoint PPT Presentation

Citation preview

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

1

บทท1แนะนำา OpenGL

(Introduction to OpenGL)

รายวชา 729441Computer Graphics

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

2

OpenGL คออะไร OpenGL (Open Graphics Library) เปนซอฟตแวรไลบราล (Software Library) ทใชตดตอกบฮารดแวรเพอการแสดงภาพกราฟก OpenGL มคำาสงสำาหรบการวาดภาพพนฐาน คอ จด เสน และรปเหลยมตาง ๆ และการแสดงภาพแรสเตอร ซงคำาสงพนฐานมอยประมาณ 120 คำาสงทสามารถใชกำาหนดคณลกษณะและควบคมการทำางานของแอปพลเคชน 3 มต ผพฒนาโปรแกรมสามารถใชไลบราล OpenGL ไดโดยไมมคาลขสทธ ทำาใหมการนำาไลบรารของ OpenGL ไปใชงานอยางแพรหลายในงานกราฟก

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

3

OpenGL คออะไร ภาษาทสามารถใชกบ OpenGL คอ C/C++ (VC++, Borland C++, C++ Builder, C compiler on UNIX ), Delphi, Visual Basic, Java, Perl, Python, Fortran และ Ada โครงสรางของ OpenGL เปนอนเทอรเฟซทเปนอสระจากฮารดแวร (Hardware-independent interface) สามารถใชไดกบระบบ (Windows, UNIX, IBM OS/2 หรอ Apple Mac OS)สามารถเคลอนยายโคดทสรางเรยบรอยแลวไปใชแพลตฟอรมอนไดอยางสะดวก (Portability) โดยไมตองเปลยนแปลงโคดโปรแกรมเลย

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

4

OpenGL คออะไร OpenGL จะไมมคำาสงทจดการกบระบบปฏบตการไมมคำาสงเพอรบอนพตจากผใชอกดวย หนาททงสองอยางนเปนของผเขยนโปรแกรม (Programmer) ทจะตองออกแบบและเขยนโคดเพอใหการทำางานเปนไปอยางมประสทธภาพ มซอฟตแวรเพมเตมทชวยจดการงานบน Windows (GLUT : OpenGL Utility Toolkit) OpenGL ไมมคำาสงระดบสงทจะใชวาดวตถ 3 มตแบบซบซอน เชน รถยนต อวยวะ หรอโมเลกลตาง ๆOpenGL มเพยงการสรางรปจำาลอง 3 มตคอรปทรงเรขาคณตอยางงายไดแก จด เสน และรปหลายเหลยมซงผใชงานจะตองนำารปทรงเหลานมาประกอบกนเพอใหเกดรปทรง 3 มตทซบซอน

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

5

OpenGL กบ DirectX DirectX เปนชดพฒนาซอฟตแวรเกมของไมโครซอฟทซงสนบสนนการทำางานหลายดานทงภาพกราฟก 2มต, 3 มต , เสยง , อปกรณอนพต และการเลนพรอมกนหลายคน DirectX มการเปลยนแปลงอยางมากทกครงทมการออกเวอรชนใหมแตยงคงรองรบการทำางานของคำาสงในเวอรชนเกาดวย (Reverse compatible) แต DirectX ทำางานบนระบบปฏบตการของไมโครซอฟตและเครองเลน Xbox เทานน สำาหรบผเรมตนเรยนร DirectX คอนขางยากเกม 3 มตสวนใหญเขยนขนจาก DirectX

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

6

OpenGL กบ DirectX OpenGL ถกควบคมโดยคณะกรรมการ ARB ตวไลบรารของ OpenGL ตางจาก DirectX เนองจากสนบสนนการทำางานเฉพาะกราฟก 2 มตและ 3 มต ผเขยนเกมตองใชไลบรารตวอนชวยเพอทำาใหเกมสมบรณ เกมทเขยนดวย OpenGL เชน Quake, DOOM, Half Life, Unreal และ Call of Duty ชดคำาสงของ OpenGL สามารถทำางานไดบนทกแพลตฟอรม การทำางานคอนขางเสถยรและการเรยนรคอนขางงายงานดานวจยและพฒนาดาน OpenGL ยงไดรบความนยมเปนอยางสงอย

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

7

เหตผลทนยมใช OpenGL ในระบบกราฟก

มประสทธภาพสงในการเรงความเรวแอปพลเคชน 3 มต และเกมตางๆ สรางเอฟเฟกต 3 มตในแบบเรยลไทมไดอยางมประสทธภาพเพมการสนบสนนอปกรณใหม ๆ ลงไปใน OpenGL ทำาไดงายและรวดเรว ทำางานไดบนหลายแพลตฟอรม ทำาใหการยายโปรแกรมประยกตแตละแพลตฟอรมนนทำาไดงาย และประหยดมเสถยรภาพในการทำางานสง สามารถใชงานกบเครองเวรคสเตชนแบบ High End 3D และซปเปอรคอมพวเตอรไดใชงานรวมกบคอมไพเลอรไดหลากหลาย เชน C/C++, Delphi, Visual Basic, Java, Perl, Fortran, Ada เปนตน

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

8

OpenGL APIOpenGL API (Application Programming Interface) คอโปรแกรมททำาหนาทเชอมตอระหวางแอปพลเคชนกบฮารดแวร โปรแกรมเมอรทเขยนแอปพลเคชนตาง ๆ ไมจำาเปนตองทราบการทำางานของฮารดแวรและไมจำาเปนตองสงคำาสงไปใหฮารดแวรทำางานโดยตรง เพยงแคเขยนใหรจก API แลว API จะทำาหนาทเปนลามในการตดตอระหวางซอฟตแวรและฮารดแวรใหโปรแกรมเมอรเอง

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

9

ฟงกชนทางกราฟก (Graphic Functions)

การทำางานของระบบกราฟก ผใชไมจำาเปนตองทราบวามการทำางานอยางไร รแตเพยงวาอนพต (input) และเอาตพต

(output) กพอแลว ในระบบกราฟกจะมฟงกชนทถกเรยกใช โดยมการรบคาของอนพตจากอปกรณตาง ๆ เชน เมาสหรอคยบอรด หรออปกรณอน ๆ เชน แมสเสจจากระบบปฏบตการ หรออนเทอรรพตกได ผลลพธทไดจากการทำางานจะแสดงออกไปยงอปกรณในการแสดงผล เชน จอภาพ CRT หรอจอ LCD

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

10

ฟงกชนทางกราฟก (Graphic Functions)

API ประกอบดวยฟงกชนจำานวนมาก แบงออกเปน 6 กลม ดงน

Primitive functions จะทำาการนยามออปเจกต หรอเอนตต (entities)

Attribute function จะกำาหนดวธในการแสดงรปพนฐานบนจอภาพ

Viewing function จะอนญาตใหผใชสามารถเลอกตำาแหนงในการมองภาพได

Transformation function จะอนญาตใหสามารถทำาการแปลงภาพได

Input function อนญาตใหทำาการใสขอมลไดหลากหลายมากขน Control Function ทำาใหสามารถทำาการตดตอกบระบบ window

เมอเรมมการทำางานของระบบและจดการกบ error ตางๆทเกดขนระหวางการทำางานของโปรแกรม

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

11

โครงสรางไลบรารพนฐานของ OpenGL

ไลบรารพนฐานของ OpenGL (ทเรยกวา OpenGL) จะมฟงกชนเกบอยในไลบราร GL ฟงกชนเหลานชอจะขนตนดวย gl หลงจากนนมชอฟงกชนทขนตน ตวแรกดวยตวอกษรพมพใหญ ตวอยางชอของฟงกชน glBegin, glClear, glCopyPixels, glPolygonModeฟงกชนเฉพาะอยางนตองใชอารกวเมนต 1 ตวหรอมากกวา 1 ตวขนอยกบฟงกชน อารกวเมนตอาจจะเปนสญลกษณเฉพาะ เชนคาคงท ,ชอพารามเตอร , คาของพารามเตอร หรอโหมดของพารามเตอร เปนตน

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

12

โครงสรางไลบรารพนฐานของ OpenGL

คาคงททงหมดนจะขนตนดวยตวอกษรพมพใหญ GL นอกจากนยงมเครองหมายขดลาง (underscore) _ เพอคนระหวางคอมโพเนนต ตวอยางชอฟงกชนทใชเครองหมาย _ คนระหวางคอมโพเนนต GL_2D, GL_RGB, GL_CCW, GL_POLYGON, GL_AMBIENT_AND_DIFFUSE เปนตนฟงกชนของ OpenGL อาจจะกำาหนดประเภทขอมลกได โดยชอประเภทขอมลนจะขนตนดวยตวพมพใหญ GL ตอดวยชอประเภทขอมลมาตรฐานทเปนตวพมพเลก เชน GLbyte, GLshort, Glint, GLfloat, GLdouble, GLboolean เปนตน

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

13

ไลบรารทเกยวของกบ OpenGL

OpenGL Utilities (GLU) เปนไลบรารทประกอบดวยรทนมากมายในการจดการมมมองเพอแสดงรปพนฐานและออปเจกตทซบซอนทประกอบขนจากเสนและรปหลายเหลยม ,แสดงรปลกบาศก , การเรนเดอรพนผว (surface-rendering) และงานทซบซอน ฟงกชนของ GLU จะขนตนดวยคำาวา glu เสมอ การเรยกใชจะตอง include ไฟล header ทชอ glu.h ในตอนตนของโคดโปรแกรม นอกจากนยงมชดเครองมอสำาหรบการพฒนาเชงวตถ (object-oriented) ทอางองกบ OpenGL อก เรยกวา Open Inventor ซงมรทนและรปทรงออปเจกตสำาหรบแอปพลเคชน 3 มตจำานวนมาก

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

14

ไลบรารทเกยวของกบ OpenGL

OpenGL Utility Toolkit (GLUT) คอไลบรารของระบบกราฟกทชวยในการตดตอกบการแสดงผลทางจอภาพ เนองจากไมสามารถสรางวนโดวไดโดยตรงจากฟงกชนของ OpenGL เพราะ OpenGL มเพยงฟงกชนทางดานกราฟกทไมขนกบอปกรณใด ๆ GLUT เปนชดเครองมอทมไลบรารของฟงกชนสำาหรบการใชงานกบระบบวนโดวของจอภาพทว ๆ ไป (ไมขนระบบใดระบบหนง )GLUT เขยนขนโดย Mark Kilgard ทำาใหการตดตอระหวางแอปพลเคชนของ OpenGL กบระบบปฏบตการแบบ Windows ทำาไดงายขนคำาสงของ GLUT จะขนตนดวยคำาวา glut เสมอ การเรยกใชจะตอง include ไฟล header ทชอ glut.h ในตอนตนของโคดโปรแกรม

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

15

ไลบรารทเกยวของกบ OpenGL

ไลบรารอน ๆ OpenGL Extension to the X Window System (GLX) ใชสำาหรบระบบปฏบตการ UNIX ทใช X Window ชอฟงกชนจะขนตนดวย glxApple GL (AGL) เปนไลบรารสำาหรบเครองแอปเปลทเปนอนเทอรเฟซสำาหรบจดการวนโดว ชอฟงกชนจะขนตนดวย agl WGL สำาหรบระบบของไมโครซอฟตวนโดวส ซงมรทนตดตอระหวาง Windows กบ OpenGL ซงรทนนจะใชฟงกชนทชอขนตนดวย wgl Presentation Manager to OpenGL (PGL) เปนไลบรารทมรทนสำาหรบอนเทอรเฟซกบ IBM OS/2 ทชอฟงกชนขนตนดวย pgl

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

16

โครงสรางไลบรารใน OpenGL

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

17

รปทรงเรขาคณตพนฐาน (Geometric Primitives) รปทรงเรขาคณตพนฐานของ OpenGL ไดแก จด ,เสน , และรปเหลยม โดยกำาหนดตำาแหนงโดยคลำาดบ

3 มต (x, y, z) หรอคลำาดบโฮโมจเนยส (x, y, z, w) (ปกต w = 1) ทเรยกวา เวอรเทกซ “ ” (vertex)

1 vertex สำาหรบจด 2 vertex สำาหรบเสน

มากกวา 2 vertex สำาหรบรปเหลยม ลกษณะของรปเหลยมของ OpenGL ม 3 ขอคอ

ขอบของรปเหลยมจะตองไมตดกนเอง รปทรงของรปเหลยมจะตองไมแหวงเวาเขาไป จะตองไมมรภายในรปเหลยม

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

18

รปเหลยมทเหมาะสมและไมเหมาะสม

รปเหลยมทไมไดระนาบเมอหมนเปลยนมมมองจะทำาใหเกดสวนเวา รปเหลยมทเหมาะสมและไม

เหมาะสม

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

19

เสนโคงทเกดจากการประกอบกนของเสนตรง

ทรงกลมทเกดจากการประกอบกนของพนผวเรยบ

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

20

คำาสงและชนดของขอมลของ OpenGL

ชนดของขอมลของ OpenGL จะคลายกบชนดของขอมลภาษา C/C++ โดยมรปแบบคำาสงดงรป

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

21

คำาสงและชนดของขอมลของ OpenGL

การใชคำาสง OpenGL จะตอง include ไฟล header ชอ gl.h คำาสงของ OpenGL จะขนตนดวย gl อยางเชน glClearColor() คาคงทจะขนตนดวย GL_ เชน GL_COLOR_BUFFER_BIT สำาหรบตวลงทายหรอ suffix ของบางคำาสงจะประกอบดวยตวเลขและตวอกษรเชน glColor3f ซงเลข 3 บงบอกถงจำานวนตวแปรอนพตคอส RGB หากเปน glColor4f จะหมายถง RGBA สวน f หมายถงอนพตจะตองเปนขอมลชนดเลขทศนยมชนดของขอมลเปนดงตาราง -31บางคำาสงใน OpenGL ม suffix ตวสดทายเปน v หมายถงคำาสงนนรบขอมลอนพตเปนพอยนเตอรทชไปยงอารเรยของคาแทนทจะเปนตวเลข

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

22

โครงสรางการเขยนโปรแกรมดวย OpenGL

ไฟล Header เพอแทรกไฟลทจำาเปนตองใชในการเขยนโปรแกรมดวย OpenGLฟงกชน init () เพอกำาหนคาเรมตนในการเขยนโปรแกรมฟงกชน xxxxx () ชอฟงกชนเพอสรางงานกราฟกทตองการฟงกชน main () เปนฟงกชนหลกเพอแสดงผลงานกราฟกทางจอภาพ

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

23

ไฟล Header การเขยนโปรแกรมกราฟกดวย OpenGL ตองแทรกไฟล header ทเปนไลบรารหลกของ OpenGL ไวตอนตนของโคดโปรแกรม แทรก gl.hแอปพลเคชนสวนมากตองใช GLU จงตองแทรก glu.hถาตองการแทรกไฟล header สำาหรบระบบ Windows จะตองมรทน wgl รทนนอยใน windows.h ดงนนตองแทรก windows.h กอน gl.h และ glu.h เพราะ windows.h มมาโครท Windows จำาปนตองใช ดงนนจะตองแทรก

#include <windows.h>#include <GL/gl.h>#include <GL/glu.h>

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

24

ไฟล Header ถาใช GLUT ในการจดการเกยวกบ windows กไมจำาเปนตองแทรกไฟล gl.h และ glu.h เนองจากในไฟล glut.h ไดรวม gl.h และ glu.h ไวเรยบรอยแลว ดงนนจงแทรกไฟล glut.h เพยงไฟลเดยว ดวยคำาสง

#include <GL/glut.h>นอกจากแทรกไฟลแลว อาจจะมการกำาหนดคาคงทไวเมอเรมตนเขยนโปรแกรมกได เชน #define GL_PI 3.14159265fใน C++ จะแทรก #include <stdio.h> #include <stdlib.h> และ #include <math.h>แตใน ISO/ANSI สำาหรบ C++ จะใช cstdio, cstdlib และ cmath

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

25

ฟงกชน init () สำาหรบกำาหนดคาเรมตน

ฟงกชน init () สำาหรบกำาหนดคาเรมตน อาจจะมฟงกชนเหลานglClearColor () เพอกำาหนดสแบคกราวนดวนโดวแสดงผลglPointSize () เพอกำาหนดขนาดของจดglLineWidth () เพอกำาหนดขนาดความหนาของเสนglColor3f () เพอกำาหนดสของออปเจกต glMatrixMode (GL_PROJECTION) เพอกำาหนดพารามเตอรสำาหรบการมองภาพ โดยใชงานรวมกบฟงกชน glOrtho ()gluOrtho2D () หรอ glOrtho () เพอฉายภาพ 2 หรอ 3มตลงบนจอภาพโดยใชการแปลงเมตรกซแบบขนาน (Orthogonal Transformation)glEnable (GL_DEPTH_TEST) เปนการเปด Depth Buffer ซงใชเกบความลก z แตละพกเซลของจอภาพเพอปองกนการวาดซอนทบกน

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

26

ฟงกชน init () สำาหรบกำาหนดคาเรมตน

ฟงกชน glClearColor (R, G, B, A) สำาหรบกำาหนดสแบคกราวนดวนโดวแสดงผล

รปแบบทใช glClearColor (R, G, B, A) เมอ R=สแดง , G=สเขยว , B=สนำาเงน และ A=คาแอลฟา (กำาหนดคาความกลมกลน (blending))

ฟงกชน glPointSize (GLdouble) เพอกำาหนดขนาดจด เชน glPointSize (2.0) สำาหรบขนาดจด 2 พกเซลฟงกชน glLineWidth (GLdouble) เพอกำาหนดขนาดความหนาเสน เชน glLineWidth (4.0) สำาหรบขนาดเสน 4พกเซลฟงกชน glColor3f (GLdouble R, GLdouble G, GLdouble B) ใชเพอกำาหนดสของออปเจกต เชน glColor3f (1.0, 0.0, 0.0) สำาหรบสแดง

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

27

ฟงกชน init () สำาหรบกำาหนดคาเรมตน

ฟงกชน glMatrixMode (GL_PROJECTION) สำาหรบการมองภาพฟงกชน gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) แตถาใช glOrtho จะใช glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)กำาหนดคา gluOrtho2 D (00. , 2000. , 00. ,

1500. ) เปนการแสดงรปสเหลยม 2 มตบนจอภาพ และคาโคออรดเนต x ของสเหลยมในชวง 00. ถง 2000. และคาโคออรดเนต y อยในชวง 00. ถง 1500. เปนตนกำาหนดโคออรดเนตอยในวนโดวแสดงผล (0.0, 0.0) ทมมลางซายมอของวนโดวแสดงผล และ (200.0, 150.0) ทมมบนขวามอ

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

28

ฟงกชน init () สำาหรบกำาหนดคาเรมตน

ตวอยางการกำาหนดฟงกชน init () เชนvoid init (void){

glClearColor (10. , 10. , 10. , 00; // Set display-window color to white.

glPointSize (4.0); // Set Point size to 4.0 pixel

glLineWidth (4.0); // Set Line width to 4.0 pixel

glMatrixMode (GL_PROJECTION); // Set projection parameters.

gluOrtho2 D (00. , 2000. , 00. , 1500. );}

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

29

ฟงกชนสำาหรบสรางงานกราฟก ในทนตงชอเปน LineAndRectangle () อาจมฟงกชน ดงน

glClear (GL_COLOR_BUFFER_BIT | GL_DEPT_BUFFER_BIT) เพอเคลยรคาสในบฟเฟอรส (color buffer) ซงเกบคาสแบคกราวนดของวนโดวแสดงผลตามทกำาหนดคาใน glClearColor () และเคลยรคาใน Dept bufferglColor3f () เพอกำาหนดสของออปเจกต ซงในบางครงอาจจะกำาหนดในฟงกชน init () กไดglRectf(x1, y1, x2, y2) เพอสรางรปสเหลยมglBegin () …… glEnd () เปนรปแบบหนงทใชในการสรางงานกราฟกพวกรปทรงเรขาคณตพนฐานglFlush () เปนคำาสงหนงทใหแสดงรทนของ OpenGL ออกทางจอภาพ

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

30

ฟงกชนสำาหรบสรางงานกราฟก ตวอยางการสรางรปสเหลยมและลากเสนตรง เปนดงนvoid LineAndRectangle (void){

glClear (GL_COLOR_BUFFER_BIT); // Clear display-window. glColor3f (0.0, 0.0, 1.0); // Set object color to blue. glRectf(180.0, 180.0, 280.0, 280.0); // Draw rectangle glBegin (GL_LINES);

glColor3f (1.0, 0.0, 0.0); // Set line segment color to red. glVertex2i (20, 20); // Specify first vertex of line. glVertex2i (150, 150); // Specify second vertex of line. glEnd ( ); glFlush ( ); // Process all OpenGL routines as quickly as

possible. }

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

31

ฟงกชนสำาหรบการทำางานหลก ฟงกชนสำาหรบการทำางานหลก อาจมฟงกชน ดงน

glutInit (&argc, argv) เพอสรางวนโดวแสดงผลglutInitDisplayMode (GLUT_SINGLE | GLUT_RGB)glutInitWindowPosition (x, y) เพอกำาหนดตำาแหนงของวนโดวแสดงผลเมอปรากฏตวครงแรก glutInitWindowSize (x, y) เพอกำาหนดความกวางและความสงของวนโดวแสดงผลglutCreateWindow (“ขอความทแสดงบนไตเตลบาร”) init ( ) เพอเรยกใชฟงกชนทกำาหนดคาเรมตนของโปรแกรมglutDisplayFunc (func_name) เพอแสดงงานกราฟกในฟงกชนทสรางglutMainLoop ( ) เพอวนรอบการแสดงผลงานกราฟกดงกลาว

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

32จอแสดงผลขนาด 400 300x ทตำาแหนง 50 50( , ) อางองกบมมบนซายของจอภาพ

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

33

ตวอยางการสรางงานกราฟก #include <GL/glut.h> // (or others, depending on the system in use)void init (void){

glClearColor (10. , 10. , 10. , 00;// Set display-window color to white.

glLineWidth (4.0); // Set Line width to 40. pixelglMatrixMode (GL_PROJECTION); // Set projection

parameters.gluOrtho2 D (00. , 3000. , 00. , 3000. );

}

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

34

ตวอยางการสรางงานกราฟก void LineAndRectangle (void){

glClear (GL_COLOR_BUFFER_BIT); // Clear display-window.

glColor3 f (00. , 00. , 10. ); // Set object color to blue.

glRectf(1800. , 1800. , 2800. , 2800. );// Draw rectangleglBegin (GL_LINES);glColor3 f (10. , 00. , 00. ); // Set line

segment color to red.glVertex2 i (20, 20);// Specify first vertex of line.

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

35

ตวอยางการสรางงานกราฟก glVertex2 i (150, 150 ; // Specify second

vertex of line.glEnd ( );glFlush ( ); // Process all OpenGL routines as

quickly as possible.}void main (int argc, char** argv){

glutInit (&argc, argv); // Initialize GLUT.glutInitDisplayMode (GLUT_SINGLE |

GLUT_RGB); // Set mode.

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

36

ตวอยางการสรางงานกราฟก glutInitWindowPosition (50, 100 ;

// Set top-left display-window glutInitWindowSize (400, 400);// Set display-window width and height.

glutCreateWindow ("An Example OpenGL Program"); // Create display window.

init ( ); // Execute initialization procedure.

glutDisplayFunc (LineAndRectangle); // Send graphics to display window.

คอมพวเตอรกราฟกสใช OpenGL (Computer Graphics using OpenGL)

37

ตวอยางการสรางงานกราฟก glutMainLoop ( ); // Display everything and

wait.}

Recommended