37
คคคคคคคคคคคคคคคคคคคคคค OpenGL 1 คคคคค 1 คคคคคค OpenGL (Introduction to OpenGL) คคคคคคค 729441 Computer Graphics

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

1

บทท1แนะนำา OpenGL

(Introduction to OpenGL)

รายวชา 729441Computer Graphics

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

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

2

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

Page 3: บทที่  1 แนะนำ  OpenGL ( Introduction to 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) โดยไมตองเปลยนแปลงโคดโปรแกรมเลย

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

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

4

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

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

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

5

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

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

คอมพวเตอรกราฟกสใช 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 ยงไดรบความนยมเปนอยางสงอย

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

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

7

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

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

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

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

8

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

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

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

9

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

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

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

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

คอมพวเตอรกราฟกสใช 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 ตางๆทเกดขนระหวางการทำางานของโปรแกรม

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

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

11

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

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

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

คอมพวเตอรกราฟกสใช 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 เปนตน

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

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

13

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

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

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

คอมพวเตอรกราฟกสใช 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 ในตอนตนของโคดโปรแกรม

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

คอมพวเตอรกราฟกสใช 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

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

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

16

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

Page 17: บทที่  1 แนะนำ  OpenGL ( Introduction to 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 ขอคอ

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

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

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

18

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

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

เหมาะสม

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

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

19

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

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

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

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

20

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

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

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

คอมพวเตอรกราฟกสใช 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 หมายถงคำาสงนนรบขอมลอนพตเปนพอยนเตอรทชไปยงอารเรยของคาแทนทจะเปนตวเลข

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

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

22

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

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

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

คอมพวเตอรกราฟกสใช 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>

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

คอมพวเตอรกราฟกสใช 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

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

คอมพวเตอรกราฟกสใช 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 แตละพกเซลของจอภาพเพอปองกนการวาดซอนทบกน

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

คอมพวเตอรกราฟกสใช 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) สำาหรบสแดง

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

คอมพวเตอรกราฟกสใช 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) ทมมบนขวามอ

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

คอมพวเตอรกราฟกสใช 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. );}

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

คอมพวเตอรกราฟกสใช 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 ออกทางจอภาพ

Page 30: บทที่  1 แนะนำ  OpenGL ( Introduction to 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. }

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

คอมพวเตอรกราฟกสใช 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 ( ) เพอวนรอบการแสดงผลงานกราฟกดงกลาว

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

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

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

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

คอมพวเตอรกราฟกสใช 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. );

}

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

คอมพวเตอรกราฟกสใช 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.

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

คอมพวเตอรกราฟกสใช 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.

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

คอมพวเตอรกราฟกสใช 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.

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

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

37

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

wait.}