ผลต่างระหว่างรุ่นของ "PyOpenGL Programming/Tutorial 1: First Program"
Cardcaptor (คุย | มีส่วนร่วม) |
Cardcaptor (คุย | มีส่วนร่วม) |
||
แถว 58: | แถว 58: | ||
*: บอกว่าสิ่งที่เริ่มไปตั้งแต่ glBegin ที่แล้วได้เสร็จสิ้นแล้ว ในที่นี้คือบอกว่ากำหนดสี่เหลี่ยมเสร็จสิ้นแล้ว (เราได้กำหนดไปสี่จุดพอดี!) | *: บอกว่าสิ่งที่เริ่มไปตั้งแต่ glBegin ที่แล้วได้เสร็จสิ้นแล้ว ในที่นี้คือบอกว่ากำหนดสี่เหลี่ยมเสร็จสิ้นแล้ว (เราได้กำหนดไปสี่จุดพอดี!) | ||
− | สังเกตว่าคำสั่ง OpenGL จะขึ้นต้นด้วย <tt>gl</tt> เสร็จแล้วจะตามด้วยชื่อคำสั่ง เช่น <tt>Vertex</tt> หรือ <tt>Color</tt> เป็นต้น บางคำสั่งอาจมีจำนวนและชนิดของ argument เช่น <tt>3f</tt> บอกว่าต้องการ argument เป็นตัวเลขประเภท float จำนวน 3 ตัว หรือ <tt>3i</tt> บอกว่าต้องการ argument ประเภท int จำนวน 3 ตัว เป็นต้น อย่างไรก็ดีภาษาไพทอนไม่ได้มาตรวจเช็คว่า argument ต้องเป็นประเภทตามที่ระบุไว้จริงๆ ชื่อคำสั่งแปลกๆ เหล่านี้เป็นผลมาจากการที่ OpenGL ถูกเขียนขึ้นมาใช้กับภาษา C เป็นภาษาแรก ดังนั้นคนเขียนโปรแกรม PyOpenGL จึงต้องระมัดระวังตรวจสอบให้ตัวแปรที่ส่งไปมีชนิดที่ถูกต้องด้วยตัวเอง | + | สังเกตว่าคำสั่ง OpenGL จะขึ้นต้นด้วย <tt>gl</tt> เสร็จแล้วจะตามด้วยชื่อคำสั่ง เช่น <tt>Vertex</tt> หรือ <tt>Color</tt> เป็นต้น บางคำสั่งอาจมีจำนวนและชนิดของ argument เช่น <tt>3f</tt> บอกว่าต้องการ argument เป็นตัวเลขประเภท float จำนวน 3 ตัว หรือ <tt>3i</tt> บอกว่าต้องการ argument ประเภท int จำนวน 3 ตัว เป็นต้น อย่างไรก็ดีภาษาไพทอนไม่ได้มาตรวจเช็คว่า argument ต้องเป็นประเภทตามที่ระบุไว้จริงๆ ชื่อคำสั่งแปลกๆ เหล่านี้เป็นผลมาจากการที่ OpenGL ถูกเขียนขึ้นมาใช้กับภาษา C เป็นภาษาแรก ดังนั้นคนเขียนโปรแกรม PyOpenGL จึงต้องระมัดระวังตรวจสอบให้ตัวแปรที่ส่งไปมีชนิดที่ถูกต้องด้วยตัวเอง สำหรับตัวย่อของตัวแปรชนิดต่างๆ สามารถดูได้ที่ http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html ที่หัวข้อ Open Command Syntax |
+ | |||
+ | ข้อควรรู้อีกประการหนึ่ีงคือ | ||
{{PyOpenGL Programming/Navigation|Basic Vocabulary|Tutorial 2: Geometric Primitives}} | {{PyOpenGL Programming/Navigation|Basic Vocabulary|Tutorial 2: Geometric Primitives}} |
รุ่นแก้ไขเมื่อ 06:05, 27 ตุลาคม 2551
โปรแกรมต่อไปนี้วาดสี่เหลี่ยมจัุตุรัสสีขาวรูปหนึ่งที่กลางวินโดว์
from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * import sys def display(): glClearColor(0,0,0,0) glClear(GL_COLOR_BUFFER_BIT) glBegin(GL_QUADS) glVertex2d(-0.5, -0.5) glVertex2d(0.5, -0.5) glVertex2d(0.5, 0.5) glVertex2d(-0.5, 0.5) glEnd() glutSwapBuffers() if __name__=="__main__": glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA) glutInitWindowSize(512, 512) glutCreateWindow("Test 01") glutDisplayFunc(display) glutMainLoop()
คำสั่ง OpenGL
ถ้าเราตัดโปรแกรมข้างบนเอามาแค่ส่วนที่เป็นคำสั่ง OpenGL จะได้ผลดังต่อไปนี้
glClearColor(0,0,0,0) glClear(GL_COLOR_BUFFER_BIT) glBegin(GL_QUADS) glVertex2d(-0.5, -0.5) glVertex2d(0.5, -0.5) glVertex2d(0.5, 0.5) glVertex2d(-0.5, 0.5) glEnd()
เรามาดูกันทีละคำสั่ง
- glClearColor(0.0, 0.0, 0.0, 0.0)
- เปลี่ยนสีที่จะใช้ล้างหน้าจอเป็นสีดำ
- glClear(GL_COLOR_BUFFER_BIT)
- ล้าง bitplane ที่เก็บสีด้วยสีทีกำหนดใน glClearColor
- glColor3f(1.0, 1.0, 1.0)
- เปลี่ยนสีเป็นสีขาว โดยที่จุด เส้น และรูปทรงที่วาดต่อจากนี้ไปจะเป็นสีขาว
- glBegin(GL_QUADS)
- บอกว่าต่อไปนี้เราจะวาดรูปสี่เหลี่ยม
- glVertex3f(x, y, z)
- กำหนดจุดยอดมุมของสี่เหลี่ยม
- glEnd()
- บอกว่าสิ่งที่เริ่มไปตั้งแต่ glBegin ที่แล้วได้เสร็จสิ้นแล้ว ในที่นี้คือบอกว่ากำหนดสี่เหลี่ยมเสร็จสิ้นแล้ว (เราได้กำหนดไปสี่จุดพอดี!)
สังเกตว่าคำสั่ง OpenGL จะขึ้นต้นด้วย gl เสร็จแล้วจะตามด้วยชื่อคำสั่ง เช่น Vertex หรือ Color เป็นต้น บางคำสั่งอาจมีจำนวนและชนิดของ argument เช่น 3f บอกว่าต้องการ argument เป็นตัวเลขประเภท float จำนวน 3 ตัว หรือ 3i บอกว่าต้องการ argument ประเภท int จำนวน 3 ตัว เป็นต้น อย่างไรก็ดีภาษาไพทอนไม่ได้มาตรวจเช็คว่า argument ต้องเป็นประเภทตามที่ระบุไว้จริงๆ ชื่อคำสั่งแปลกๆ เหล่านี้เป็นผลมาจากการที่ OpenGL ถูกเขียนขึ้นมาใช้กับภาษา C เป็นภาษาแรก ดังนั้นคนเขียนโปรแกรม PyOpenGL จึงต้องระมัดระวังตรวจสอบให้ตัวแปรที่ส่งไปมีชนิดที่ถูกต้องด้วยตัวเอง สำหรับตัวย่อของตัวแปรชนิดต่างๆ สามารถดูได้ที่ http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html ที่หัวข้อ Open Command Syntax
ข้อควรรู้อีกประการหนึ่ีงคือ
หน้าก่อน: Basic Vocabulary | สารบัญ | หน้าต่อไป: Tutorial 2: Geometric Primitives |