1 / 44

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

คอมพิวเตอร์กราฟิกส์ใช้ OpenGL (Computer Graphics using OpenGL). น.ท.ไพศาล โมลิสกุลมงคล. บทที่ 3 แนะนำ OpenGL ( Introduction to OpenGL ). OpenGL (Open Graphics Library) เป็นซอฟต์แวร์ไลบราลี (Software Library) ที่ใช้ติดต่อกับฮาร์ดแวร์เพื่อการแสดงภาพกราฟิก

Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. คอมพิวเตอร์กราฟิกส์ใช้ OpenGL(Computer Graphics using OpenGL) น.ท.ไพศาล โมลิสกุลมงคล

  2. บทที่ 3แนะนำ OpenGL(Introduction to OpenGL)

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

  4. ภาษาที่สามารถใช้กับ 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 คืออะไร

  5. OpenGL จะไม่มีคำสั่งที่จัดการกับระบบปฏิบัติการ ไม่มีคำสั่งเพื่อรับอินพุตจากผู้ใช้อีกด้วย หน้าที่ทั้งสองอย่างนี้เป็นของผู้เขียนโปรแกรม (Programmer) ที่จะต้องออกแบบและเขียนโค้ดเพื่อให้การทำงานเป็นไปอย่างมีประสิทธิภาพ มีซอฟต์แวร์เพิ่มเติมที่ช่วยจัดการงานบน Windows (GLUT : OpenGL Utility Toolkit) OpenGL ไม่มีคำสั่งระดับสูงที่จะใช้วาดวัตถุ 3 มิติแบบซับซ้อน เช่น รถยนต์ อวัยวะ หรือโมเลกุลต่าง ๆ OpenGL มีเพียงการสร้างรูปจำลอง 3 มิติคือรูปทรงเรขาคณิตอย่างง่ายได้แก่ จุด เส้น และรูปหลายเหลี่ยมซึ่งผู้ใช้งานจะต้องนำรูปทรงเหล่านี้มาประกอบกันเพื่อให้เกิดรูปทรง 3 มิติที่ซับซ้อน OpenGL คืออะไร

  6. OpenGL คืออะไร สถาปัตยกรรมของOpenGL

  7. DirectX เป็นชุดพัฒนาซอฟต์แวร์เกมของไมโครซอฟท์ซึ่งสนับสนุนการทำงานหลายด้านทั้งภาพกราฟิก 2 มิติ, 3 มิติ, เสียง, อุปกรณ์อินพุต และการเล่นพร้อมกันหลายคน DirectX มีการเปลี่ยนแปลงอย่างมากทุกครั้งที่มีการออกเวอร์ชันใหม่แต่ยังคงรองรับการทำงานของคำสั่งในเวอร์ชันเก่าด้วย (Reverse compatible) แต่ DirectX ทำงานบนระบบปฏิบัติการของไมโครซอฟต์และเครื่องเล่น Xbox เท่านั้น สำหรับผู้เริ่มต้นเรียนรู้ DirectX ค่อนข้างยาก เกม 3 มิติส่วนใหญ่เขียนขึ้นจาก DirectX OpenGL กับ DirectX

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

  9. มีประสิทธิภาพสูงในการเร่งความเร็วแอปพลิเคชัน 3 มิติ และเกมต่างๆ สร้างเอ็ฟเฟ็กต์ 3 มิติในแบบเรียลไทม์ได้อย่างมีประสิทธิภาพ เพิ่มการสนับสนุนอุปกรณ์ใหม่ ๆ ลงไปใน OpenGL ทำได้ง่ายและรวดเร็ว ทำงานได้บนหลายแพล็ตฟอร์ม ทำให้การย้ายโปรแกรมประยุกต์แต่ละแพล็ตฟอร์มนั้นทำได้ง่าย และประหยัด มีเสถียรภาพในการทำงานสูง สามารถใช้งานกับเครื่องเวิร์คสเตชันแบบ High End 3D และซุปเปอร์คอมพิวเตอร์ได้ ใช้งานร่วมกับคอมไพเลอร์ได้หลากหลาย เช่น C/C++, Delphi, Visual Basic, Java, Perl, Fortran, Ada เป็นต้น เหตุผลที่นิยมใช้ OpenGL ในระบบกราฟิก

  10. OpenGL API (Application Programming Interface) คือโปรแกรมที่ทำหน้าที่เชื่อมต่อระหว่างแอปพลิเคชันกับฮาร์ดแวร์ โปรแกรมเมอร์ที่เขียนแอปพลิเคชันต่าง ๆ ไม่จำเป็นต้องทราบการทำงานของฮาร์ดแวร์และไม่จำเป็นต้องส่งคำสั่งไปให้ฮาร์ดแวร์ทำงานโดยตรง เพียงแค่เขียนให้รู้จัก API แล้ว API จะทำหน้าที่เป็นล่ามในการติดต่อระหว่างซอฟต์แวร์และฮาร์ดแวร์ให้โปรแกรมเมอร์เอง OpenGL API

  11. การทำงานของระบบกราฟิก ผู้ใช้ไม่จำเป็นต้องทราบว่ามีการทำงานอย่างไร รู้แต่เพียงว่าอินพุต (input) และเอาต์พุต (output) ก็พอแล้ว ในระบบกราฟิกจะมีฟังก์ชันที่ถูกเรียกใช้ โดยมีการรับค่าของอินพุตจากอุปกรณ์ต่าง ๆ เช่น เมาส์หรือคีย์บอร์ด หรืออุปกรณ์อื่น ๆ เช่น แมสเสจจากระบบปฏิบัติการ หรืออินเทอร์รัพต์ก็ได้ ผลลัพธ์ที่ได้จากการทำงานจะแสดงออกไปยังอุปกรณ์ในการแสดงผล เช่น จอภาพ CRT หรือจอ LCD ฟังก์ชันทางกราฟิก (Graphic Functions)

  12. API ประกอบด้วยฟังก์ชันจำนวนมาก แบ่งออกเป็น 6 กลุ่ม ดังนี้ Primitive functions จะทำการนิยามออปเจ็กต์ หรือเอ็นติตี้ (entities) Attribute function จะกำหนดวิธีในการแสดงรูปพื้นฐานบนจอภาพ Viewing function จะอนุญาตให้ผู้ใช้สามารถเลือกตำแหน่งในการมองภาพได้ Transformation function จะอนุญาตให้สามารถทำการแปลงภาพได้ Input function อนุญาตให้ทำการใส่ข้อมูลได้หลากหลายมากขึ้น Control Function ทำให้สามารถทำการติดต่อกับระบบ window เมื่อเริ่มมีการทำงานของระบบและจัดการกับ error ต่างๆที่เกิดขึ้นระหว่างการทำงานของโปรแกรม ฟังก์ชันทางกราฟิก (Graphic Functions)

  13. ไลบรารีพื้นฐานของ OpenGL (ที่เรียกว่า OpenGL) จะมีฟังก์ชันเก็บอยู่ในไลบรารี GL ฟังก์ชันเหล่านี้ชื่อจะขึ้นต้นด้วย gl หลังจากนั้นมีชื่อฟังก์ชันที่ขึ้นต้น ตัวแรกด้วยตัวอักษรพิมพ์ใหญ่ ตัวอย่างชื่อของฟังก์ชัน glBegin, glClear, glCopyPixels, glPolygonMode ฟังก์ชันเฉพาะอย่างนี้ต้องใช้อาร์กิวเมนต์ 1 ตัวหรือมากกว่า 1 ตัวขึ้นอยู่กับฟังก์ชัน อาร์กิวเมนต์อาจจะเป็นสัญลักษณ์เฉพาะ เช่นค่าคงที่, ชื่อพารามิเตอร์, ค่าของพารามิเตอร์ หรือโหมดของพารามิเตอร์ เป็นต้น โครงสร้างไลบรารีพื้นฐานของ OpenGL

  14. ค่าคงที่ทั้งหมดนี้จะขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่ GL นอกจากนี้ยังมีเครื่องหมายขีดล่าง (underscore) _ เพื่อคั่นระหว่างคอมโพเนนต์ ตัวอย่างชื่อฟังก์ชันที่ใช้เครื่องหมาย _ คั่นระหว่างคอมโพเนนต์ GL_2D, GL_RGB, GL_CCW, GL_POLYGON, GL_AMBIENT_AND_DIFFUSE เป็นต้น ฟังก์ชันของ OpenGL อาจจะกำหนดประเภทข้อมูลก็ได้ โดยชื่อประเภทข้อมูลนี้จะขึ้นต้นด้วยตัวพิมพ์ใหญ่ GL ต่อด้วยชื่อประเภทข้อมูลมาตรฐานที่เป็นตัวพิมพ์เล็ก เช่น GLbyte, GLshort, Glint, GLfloat, GLdouble, GLboolean เป็นต้น โครงสร้างไลบรารีพื้นฐานของ OpenGL

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

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

  17. ไลบรารีอื่น ๆ OpenGL Extension to the X Window System (GLX) ใช้สำหรับระบบปฏิบัติการ UNIX ที่ใช้ X Window ชื่อฟังก์ชันจะขึ้นต้นด้วย glx Apple GL (AGL) เป็นไลบรารีสำหรับเครื่องแอปเปิลที่เป็นอินเทอร์เฟซสำหรับจัดการวินโดว์ ชื่อฟังก์ชันจะขึ้นต้นด้วย agl WGL สำหรับระบบของไมโครซอฟต์วินโดวส์ ซึ่งมีรูทีนติดต่อระหว่าง Windows กับ OpenGL ซึ่งรูทีนนี้จะใช้ฟังก์ชันที่ชื่อขึ้นต้นด้วย wgl Presentation Manager to OpenGL (PGL) เป็นไลบรารีที่มีรูทีนสำหรับอินเทอร์เฟซกับ IBM OS/2 ที่ชื่อฟังก์ชันขึ้นต้นด้วย pgl ไลบรารีที่เกี่ยวข้องกับ OpenGL

  18. โครงสร้างไลบรารีใน OpenGL

  19. รูปทรงเรขาคณิตพื้นฐานของ OpenGL ได้แก่ จุด, เส้น, และรูปเหลี่ยม โดยกำหนดตำแหน่งโดยคู่ลำดับ 3 มิติ (x, y, z) หรือคู่ลำดับโฮโมจีเนียส (x, y, z, w) (ปกติ w = 1) ที่เรียกว่า “เวอร์เท็กซ์” (vertex) 1 vertex สำหรับจุด 2 vertex สำหรับเส้น มากกว่า 2 vertex สำหรับรูปเหลี่ยม ลักษณะของรูปเหลี่ยมของ OpenGL มี 3 ข้อคือ ขอบของรูปเหลี่ยมจะต้องไม่ตัดกันเอง รูปทรงของรูปเหลี่ยมจะต้องไม่แหว่งเว้าเข้าไป จะต้องไม่มีรูภายในรูปเหลี่ยม รูปทรงเรขาคณิตพื้นฐาน (Geometric Primitives)

  20. รูปเหลี่ยมที่เหมาะสมและไม่เหมาะสมรูปเหลี่ยมที่เหมาะสมและไม่เหมาะสม รูปเหลี่ยมที่ไม่ได้ระนาบเมื่อหมุนเปลี่ยนมุมมองจะทำให้เกิดส่วนเว้ารูปเหลี่ยมที่เหมาะสมและไม่เหมาะสม

  21. เส้นโค้งที่เกิดจากการประกอบกันของเส้นตรงเส้นโค้งที่เกิดจากการประกอบกันของเส้นตรง ทรงกลมที่เกิดจากการประกอบกันของพื้นผิวเรียบ

  22. ชนิดของข้อมูลของ OpenGL จะคล้ายกับชนิดของข้อมูลภาษา C/C++ โดยมีรูปแบบคำสั่งดังรูป คำสั่งและชนิดของข้อมูลของ OpenGL

  23. การใช้คำสั่ง OpenGL จะต้อง include ไฟล์ header ชื่อ gl.h คำสั่งของ OpenGL จะขึ้นต้นด้วย gl อย่างเช่น glClearColor() ค่าคงที่จะขึ้นต้นด้วย GL_ เช่น GL_COLOR_BUFFER_BIT สำหรับตัวลงท้ายหรือ suffix ของบางคำสั่งจะประกอบด้วยตัวเลขและตัวอักษรเช่น glColor3f ซึ่งเลข 3 บ่งบอกถึงจำนวนตัวแปรอินพุตคือสี RGB หากเป็น glColor4f จะหมายถึง RGBA ส่วน f หมายถึงอินพุตจะต้องเป็นข้อมูลชนิดเลขทศนิยม ชนิดของข้อมูลเป็นดังตาราง 3-1 บางคำสั่งใน OpenGL มี suffix ตัวสุดท้ายเป็น v หมายถึงคำสั่งนั้นรับข้อมูลอินพุตเป็นพอยน์เตอร์ที่ชี้ไปยังอาร์เรย์ของค่าแทนที่จะเป็นตัวเลข คำสั่งและชนิดของข้อมูลของ OpenGL

  24. ไฟล์ Header เพื่อแทรกไฟล์ที่จำเป็นต้องใช้ในการเขียนโปรแกรมด้วย OpenGL ฟังก์ชัน init () เพื่อกำหนค่าเริ่มต้นในการเขียนโปรแกรม ฟังก์ชัน xxxxx () ชื่อฟังก์ชันเพื่อสร้างงานกราฟิกที่ต้องการ ฟังก์ชัน main () เป็นฟังก์ชันหลักเพื่อแสดงผลงานกราฟิกทางจอภาพ โครงสร้างการเขียนโปรแกรมด้วย OpenGL

  25. การเขียนโปรแกรมกราฟิกด้วย 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> ไฟล์ Header

  26. ถ้าใช้ 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 ไฟล์ Header

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

  28. ฟังก์ชัน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) สำหรับสีแดง ฟังก์ชัน init () สำหรับกำหนดค่าเริ่มต้น

  29. ฟังก์ชัน 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) กำหนดค่า gluOrtho2D (0.0, 200.0, 0.0, 150.0) เป็นการแสดงรูปสี่เหลี่ยม 2 มิติบนจอภาพ และค่าโคออร์ดิเนต x ของสี่เหลี่ยมในช่วง 0.0 ถึง 200.0 และค่าโคออร์ดิเนต y อยู่ในช่วง 0.0 ถึง 150.0 เป็นต้น กำหนดโคออร์ดิเนตอยู่ในวินโดว์แสดงผล (0.0, 0.0) ที่มุมล่างซ้ายมือของวินโดว์แสดงผล และ (200.0, 150.0) ที่มุมบนขวามือ ฟังก์ชัน init () สำหรับกำหนดค่าเริ่มต้น

  30. ตัวอย่างการกำหนดฟังก์ชัน init () เช่น void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); // 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. gluOrtho2D (0.0, 200.0, 0.0, 150.0); } ฟังก์ชัน init () สำหรับกำหนดค่าเริ่มต้น

  31. ในที่นี้ตั้งชื่อเป็น LineAndRectangle () อาจมีฟังก์ชัน ดังนี้ glClear (GL_COLOR_BUFFER_BIT | GL_DEPT_BUFFER_BIT)เพื่อเคลียร์ค่าสีในบัฟเฟอร์สี (color buffer) ซึ่งเก็บค่าสีแบ็คกราวนด์ของวินโดว์แสดงผลตามที่กำหนดค่าใน glClearColor () และเคลียร์ค่าใน Dept buffer glColor3f ()เพื่อกำหนดสีของออปเจ็กต์ ซึ่งในบางครั้งอาจจะกำหนดในฟังก์ชัน init () ก็ได้ glRectf(x1, y1, x2, y2)เพื่อสร้างรูปสี่เหลี่ยม glBegin () …… glEnd ()เป็นรูปแบบหนึ่งที่ใช้ในการสร้างงานกราฟิกพวกรูปทรงเรขาคณิตพื้นฐาน glFlush ()เป็นคำสั่งหนึ่งที่ให้แสดงรูทีนของ OpenGL ออกทางจอภาพ ฟังก์ชันสำหรับสร้างงานกราฟิก

  32. ตัวอย่างการสร้างรูปสี่เหลี่ยมและลากเส้นตรง เป็นดังนี้ 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. } ฟังก์ชันสำหรับสร้างงานกราฟิก

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

  34. จอแสดงผลขนาด 400x300 ที่ตำแหน่ง (50, 50) อ้างอิงกับมุมบนซ้ายของจอภาพ

  35. #include <GL/glut.h> // (or others, depending on the system in use) void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0);// Set display-window color to white. glLineWidth (4.0); // Set Line width to 4.0 pixel glMatrixMode (GL_PROJECTION); // Set projection parameters. gluOrtho2D (0.0, 300.0, 0.0, 300.0); } ตัวอย่างการสร้างงานกราฟิก

  36. 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. ตัวอย่างการสร้างงานกราฟิก

  37. glVertex2i (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. ตัวอย่างการสร้างงานกราฟิก

  38. 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. ตัวอย่างการสร้างงานกราฟิก

  39. glutMainLoop ( ); // Display everything and wait. } ตัวอย่างการสร้างงานกราฟิก

  40. ติดตั้ง Microsoft Visual Studio 6.0ในระบบให้เรียบร้อย ดาวน์โหลดไฟล์ glut-3.7.6-bin.zip แล้วแตก zip นำไฟล์ไปไว้ในโฟลเดอร์ ดังนี้ glut.h ไปไว้ใน C:\Program Files\Microsoft Visual Studio\VC98\Include\GL glut32.lib ไปไว้ใน C:\Program Files\Microsoft Visual Studio\VC98\Lib glut32.dll ไปไว้ใน C:\WINDOWS\SYSTEM การเขียนโปรแกรม OpenGL ใน Microsoft VC++

  41. การเขียนโปรแกรมแบบ Console Application ให้ทำดังนี้ เปิดใช้งาน Microsoft Visual C++ 6.0 แล้วเปิดเมนู Fileแล้วเลือก New.. สร้างโปรเจ็กต์ใหม่ แบบConsole Applicationโดยเลือก Win32 Console Applicationในแท็บProjectsแล้วตั้งชื่อโปรเจ็กต์ในบ็อกซ์ Project name :แล้วคลิกที่ OK เมื่อปรากฏไดอะล็อกบ็อกซ์ Win32 Console Application- Step 1 of 1ให้เลือกออปชัน An empty projectแล้วคลิกที่ Finish เมื่อปรากฏไดอะล็อกบ็อกซ์New project informationให้คลิกที่ OKเพื่อยืนยัน การเขียนโปรแกรม OpenGL ใน Microsoft VC++

  42. การเขียนโปรแกรมแบบ Console Application ให้ทำดังนี้ หลังจากสร้างไฟล์โปรเจ็กต์เรียบร้อยแล้ว ขั้นตอนต่อไปเป็นการสร้างไฟล์สำหรับการเขียนโปรแกรม โดยเปิดเมนู File แล้วเลือก New… เมื่อปรากฏไดอะล็อกบ็อกซ์ New ให้เลือกแท็บ Fileแล้วเลือก C++Source Fileแล้วตั้งชื่อไฟล์ ในที่นี้ตั้งชื่อเป็นtest1.cpp(อยู่ในโปรเจ็กต์ test) แล้วคลิกที่ OK จะปรากฏวินโดว์ว่าง ๆ รอให้คุณเขียนโปรแกรม เริ่มเขียนโค้ดโปรแกรมดังตัวอย่าง ex03_01.cpp เมื่อโค้ดโปรแกรมเสร็จเรียบร้อยแล้ว โปรแกรมก็พร้อมสำหรับการคอมไพล์และรัน การเขียนโปรแกรม OpenGL ใน Microsoft VC++

  43. การคอมไพล์และรันโค้ดโปรแกรม ทำดังนี้ คอมไพล์ไฟล์ test1.cppโดยเปิดเมนู Build แล้วเลือก Compile test.cppหรือกดคีย์ Ctrl+F7 สร้างไฟล์ที่สามารถเอ็กซิคิวต์ได้ โดยเปิดเมนู Buildแล้วเลือก Buildtest.exeหรือกดคีย์ F7 สั่งรันโปรแกรมtest.exeโดยเปิดเมนู Build แล้วเลือก Execute test.exeหรือกดคีย์ Ctrl+F5 ถ้าปรากฏแมสเสจบ็อกซ์แจ้งว่าไม่มีไฟล์ test.exeแสดงว่าคุณยังไม่ได้ปฏิบัติในขั้นตอนที่ 2 ให้ตอบ Yes หลังจากนั้นจะปรากฏวินโดว์แสดงผลของคำสั่ง OpenGL ดังรูป 3.11 การเขียนโปรแกรม OpenGL ใน Microsoft VC++

More Related