ใน ยุคแรกๆของคอมพิวเตอร์กราฟฟิค การคำนวนต่างๆในการแสดงภาพกราฟฟิคเกิดขึ้นที่ CPU ซึ่งก็หมายความว่า CPU ต้องรับภาระในการทำงานมาก ยิ่งต่อมาการแสดงภาพกราฟฟิคมีความละเอียดมากขึ้น CPU เลยต้องทำงานหนักขึ้นไปอีก เพื่อลดภาระในการทำงานของ CPU และเพิ่มประสิทธิภาพในการแสดงภาพ จึงได้มีแนวความคิดในการพัฒนา การ์ดจอ (Graphic Card) ให้มีความสามารถมากขึ้นในการคำนวณกราฟฟิค จาก Graphic Card ธรรมดาเลยยกระดับมาเป็น GPU ( Graphic Processing Unit ) แต่ว่าในช่วงแรกๆ การคำนวณกราฟฟิคต่างๆ จะเป็นแบบสำเร็จรูป ( Fixed Function ) คือมีการจัดเตรียมฟังก์ชั่นสำเร็จรูปต่างๆ มาให้ใช้ ซึ่งก็สะดวกในการใช้งานดี แต่บางครั้งก็ยังไม่พอต่อการใช้งาน สำหรับโปรแกรมเมอร์ระดับเซียนทั้งหลาย...
OpenGL Shader Language (GLSL) ถูกพัฒนาขึ้นมาให้สามารถเข้าไปสั่งงาน GPU ได้โดยตรง ซึ่งต่างจาก OpenGL ( ที่ทำงานในลักษณะ ฟังก์ชั่นสำเร็จรูป Fixed Function คือมีการเตรียมฟังก์ชั่นต่างๆให้ใช้ในการคำนวณ การแสดงภาพ แต่ว่าไม่สามารถเขียนโปรแกรมสั่งงาน GPU โดยตรงได้) OpenGL Shader Language มีโครงสร้างคล้ายๆกับภาษา C, C++ และเวลาใช้งานต้องใช้ร่วมกับ OpenGL อีกทีหนึ่งไม่ได้ทำงานเดี่ยวๆ ดังนั้นถ้า คำสั่งของ OpenGL สามารถตอบสนองความต้องการได้ก็ให้ใช้ ฟังก์ชั่นสำเร็จรูปของ OpenGL จะดีกว่าไม่ต้องปวดหัว แต่ในกรณีที่ฟังก์ชั่นสำเร็จรูปของ OpenGL ไม่สามารถตอบสนองความต้องการได้จึงเขียนโปรแกรม OpenGL Shader เข้าไปเสริมการทำงานของ OpenGL อีกทีหนึ่ง
ดังนั้นผู้ที่จะศึกษาOpenGL Shader Language จึงต้องสามารถใช้ และเข้าใจการทำงาน OpenGL มาเป็นอย่างดี จึงจะสามารถเขียนโปรแกรมได้ และเหมือนเดิม บทความชุดนี้จะใช้ Editor CodeBlock ที่มาพร้อมกับ คอมไพเลอร์ของ gcc และ header file ต่างๆที่จำเป็นในการเขียนโปรแกรม OpenGL ผู้สนใจศึกษารายละเอียดได้จาก OpenGL3.3:: โปรแกรมกราฟิคโดย โอเพนจีแอล
GLSL Version | OpenGL Version |
---|---|
1.10.59 | 2.0 |
1.20.8 | 2.1 |
1.30.10 | 3.0 |
1.40.08 | 3.1 |
1.50.11 | 3.2 |
3.30.6 | 3.3 |
4.00.9 | 4.0 |
4.10.6 | 4.1 |
4.20.6 | 4.2 |
4.30.6 | 4.3 |
ใน การออกเวอร์ชั่นใหม่ๆ ของ OpenGL ก็จะมีการออกเวอร์ชั่นใหม่ของ OpenGL Shader ออกมาคู่กัน ดังนั้นการใช้คำสั่งของ OpenGL Shader จึงต้องให้สอดคล้องกับเวอร์ชั่นของ OpenGL ด้วย ดังตารางที่แสดงข้างบน
ภาพ ที่แสดงข้างบนคือ OpenGL Rendering Pipeline เป็นขั้นตอนการทำงานของ OpenGL รายละเอียดการทำงานหาอ่านได้จากตามลิงค์ http://glprogramming.com/red/chapter01.html#name1 โปรแกรม OpenGL Shader จะเข้าไปทำงานแทน OpenGL ที่ตำแหน่ง Vertex Operation และ Fragment Operation โดยฟังก์ชั่นของ OpenGL จะหยุดการทำงานโดยอัติโนมัติ เมื่อมีการใช้โปรแกรมของ OpenGL Shader
ในบทความตอนต่อไปจะแสดงการเขียนโปรแกรม OpenGL Shader เข้าไปทำงานร่วมกับ OpenGL แบบง่ายสุดๆ โดยใช้คำสั่งของ OpenGL 2.1 ร่วมกับ OpenGL shader version 120 เพื่อให้ท่านผู้อ่าน ได้เข้าใจหลักการเขียนโปรแกรม OpenGL Shader เบื้องต้น แต่ว่าเนื้อหาหลักของบทความชุดนี้จะใช้ คำสั่งของ OpenGL 3.3 คู่กับ OpenGL Shader version 330
แนะนำโปรแกรมฟรี ในการทำงาน
1. โปรแกรม Editor => CodeBlocks
2. โปรแกรมโหลดภาพ สำหรับทำ Texture => freeimage
3. โปรแกรมตกแต่งภาพ => GIMP
4. โปรแกรม Hexa Editor สำหรับอ่านไฟล์ Binary => XVI32
Credit : เนื้อหาในบทความชุดนี้ รวมทั้ง Source Code ดัดแปลงมาจากหลายที่เช่น www.mbsoftworks.sk : //glm.g-truc.net จึงขอแสดงความขอบคุณมาในที่นี้ด้วย
ไม่มีความคิดเห็น:
แสดงความคิดเห็น