Upload
rashad-sherman
View
156
Download
8
Embed Size (px)
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.}