[OpenGL] เส้น ๆ

จากครั้งที่แล้วที่สอนลง 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

  1. linkinnum

    ทำตามแล้ว error ตลอดเลยอะครับ บนเรียนตอนติดตั้งไม่มีปัญหาครับ แต่พอมาบนเรียนนี้แล้ว รันไม่ออกเลยครับ อยากทราบวิธีการทำ ว่าสร้าง project ยังไงอะครับ สร้างโปรเจคแบบบนเรียนแรก แล้วลบโค้ดทิ้ง แล้วกอปโค้ดนี้มาใส่หรอครับ ช่วยเหลือด้วยนะครับ อยากเขียนเป็นครับ ขอบคุณล่วงหน้าครับ

  2. JiJaKuNg

    ทราบแล้วครับ

    เดี๋ยวขอผ่านช่วงนี้ไปก่อน เดี๋ยวจะมาสอนนะครับ

    ตอนนี้ไม่ว่าง + ไม่สบายด้วยอ่ะครับ

    หวังว่าคงไม่รีบมากนะครับ

Leave a Reply