วันศุกร์ที่ 17 มีนาคม พ.ศ. 2560

OpenGL Shader

 
ใน ยุคแรกๆของคอมพิวเตอร์กราฟฟิค การคำนวนต่างๆในการแสดงภาพกราฟฟิคเกิดขึ้นที่ 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 VersionOpenGL Version
1.10.592.0
1.20.82.1
1.30.103.0
1.40.083.1
1.50.113.2
3.30.63.3
4.00.94.0
4.10.64.1
4.20.64.2
4.30.64.3
ใน การออกเวอร์ชั่นใหม่ๆ ของ OpenGL ก็จะมีการออกเวอร์ชั่นใหม่ของ  OpenGL Shader ออกมาคู่กัน  ดังนั้นการใช้คำสั่งของ OpenGL Shader จึงต้องให้สอดคล้องกับเวอร์ชั่นของ OpenGL ด้วย ดังตารางที่แสดงข้างบน  
gl pipeline
ภาพ ที่แสดงข้างบนคือ 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  จึงขอแสดงความขอบคุณมาในที่นี้ด้วย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...