จากครั้งที่แล้วที่สอนลง OpenGL นะครับ วันนี้ก็จะมาสอนการเขียน OpenGL แบบเบื้องต้น (เบื้องต้นจริง ๆ)
เริ่มแรก เราจะมาสร้างเส้นตรง 1 เส้น กันก่อนนะครับ
#include<windows.h>
#include<gl/glut.h>
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glLineWidth(2.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,300.0,0.0,300.0);
}
void Line(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glBegin(GL_LINES);
glVertex2i(20,20);
glVertex2i(150,150);
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("Line Tutorial");
init();
glutDisplayFunc(Line);
glutMainLoop();
}
ลองพิมพ์ตามนี้ แล้วคอมไพล์ดูครับ เราจะได้เส้นตรงออกมา 1 เส้นตามนี้
โดยใน OpenGL ระบบแกน (x,y) จะเริ่มนับ (0,0) ที่มุม ล่างซ้าย และเพิ่มขึ้นเรื่อย ๆ ตามแนวนอน และ แนวตั้ง
เริ่มอธิบายทีละคำสั่งละกัน
#include<windows.h>
#include<gl/glut.h>
เนื่องจากเราเขียนบนวินโดวส์เราเลยต้อง include windows.h และ include gl/glut.h เพื่อใช้งานคำสั่งต่าง ๆ เกี่ยวกับวินโดวส์
เมื่อเรา include glut.h แล้ว เราไม่ต้อง include glu.h และ gl.h อีก เพราะว่า glut.h ได้รวมทั้ง 2 ไว้ในตัวแล้ว
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0); // เคลียร์หน้าต่างที่ใช้แสดงให้เป็นสีขาว
glLineWidth(2.0); // กำหนดความหนาของเส้น
glMatrixMode(GL_PROJECTION); // เพื่อกำหนดพารามิเตอร์สำหรับการมองภาพ โดยใช้งานร่วมกับฟังก์ชัน glOrtho2D()
gluOrtho2D(0.0,300.0,0.0,300.0); //เพื่อฉายภาพ 2 มิติลงบนจอภาพ
}
init(void) เป็น Function ที่ใช้สำหรับกำหนดค่าเริ่มต้นของโปรแกรม
ต่อไปก็เป็นFunction Line ซึ่งเป็น Function สำหรับวาดเส้นของเราในครั้งนี้
void Line(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //เพื่อเคลียร์ค่าสีในบัฟเฟอร์สี (color buffer) ซึ่งเก็บค่าสีแบ็คกราวนด์ของวินโดว์แสดงผลตามที่กำหนดค่าใน glClearColor() และเคลียร์ค่าใน Dept buffer
glColor3f(1.0,0.0,0.0); // กำหนดสีของเส้น
glBegin(GL_LINES); // เริ่มวาดเส้น
glVertex2i(20,20); // จุดเริ่มต้นของเส้น
glVertex2i(150,150); // จุดสุดท้ายของเส้น
glEnd(); // จบการวาดเส้น
glFlush(); // เป็นคำสั่งหนึ่งที่ให้แสดงรูทีนของ OpenGL ออกทางจอภาพ
}
ต่อไปเป็นส่วนหลักของโปรแกรมเรานั่นก็คือ function main
int main(int argc, char **argv) {
glutInit(&argc, argv); //สร้างหน้าต่างแสดงผล
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //เป็นการตั้งค่าโหมดที่จะใช้แสดง
glutInitWindowPosition(100,100); //กำหนดตำแหน่งของหน้าต่างโดยเริ่มนับ (0,0) จากมุมบนซ้าย
glutInitWindowSize(400,400); //กำหนดขนาดเริ่มต้นของหน้าต่าง
glutCreateWindow("Line Tutorial"); //ใส่ชื่อให้กับหน้าต่าง
init(); //เรียก Function init(); ให้ทำงาน
glutDisplayFunc(Line); //แสดงกราฟิกใน function ที่สร้างไว้
glutMainLoop(); //วนลูปการแสดงผลกราฟิก
}
เราสามารถที่จะปรับเปลี่ยนที่ตั้ง และความยาว ของเส้นตรง โดยเปลี่ยนพารามิเตอร์ในคำสั่งนี้
glBegin(GL_LINES);
glVertex2i(20,20);
glVertex2i(150,150);
glEnd();
จบกับเส้นตรง 1 เส้น แบบงง ๆ
คราวหน้าจะเป็นการสร้างวงกลมแบบง่าย ๆ นะครับ
Comments
ทำตามแล้ว error ตลอดเลยอะครับ บนเรียนตอนติดตั้งไม่มีปัญหาครับ แต่พอมาบนเรียนนี้แล้ว รันไม่ออกเลยครับ อยากทราบวิธีการทำ ว่าสร้าง project ยังไงอะครับ สร้างโปรเจคแบบบนเรียนแรก แล้วลบโค้ดทิ้ง แล้วกอปโค้ดนี้มาใส่หรอครับ ช่วยเหลือด้วยนะครับ อยากเขียนเป็นครับ ขอบคุณล่วงหน้าครับ
ทราบแล้วครับ
เดี๋ยวขอผ่านช่วงนี้ไปก่อน เดี๋ยวจะมาสอนนะครับ
ตอนนี้ไม่ว่าง + ไม่สบายด้วยอ่ะครับ
หวังว่าคงไม่รีบมากนะครับ
คับๆๆ ขอบคุณ ครับ