ห่างหายไปนานกับ Entry ว่าด้วยเรื่องของ OpenGL
จากคราวที่แล้ว ที่บอกว่าจะมาสอนวาดวงกลมนั้นขอข้ามไปก่อนละกันครับ
ขอเป็นวาด ทรงกลม เลยละกัน
(Entry นี้อาจจะเมา ๆ นะครับ เขียนตอนตี 2 หลังทำการบ้าน CG เสร็จ(แต่ไม่สมบูรณ์))
เริ่มที่ Header ก่อนเลยครับ
#include <stdio.h>
#include <GL/glut.h>
GLUquadricObj *theObj;
int i;
ที่เพิ่มเติมเข้ามาก็คือ GLUquadricObj *theObject นั่นก็เพื่อประกาศตัวแปรประเภท Quadric ชื่อ theObject
void init()
{
glEnable(GL_DEPTH_TEST);
glClearColor(0.0,0.0,0.0,0.0);
theObj = gluNewQuadric();
}
ส่วนนี้ที่เพิ่มเติมมาก็คือ theObj = gluNewQuadric(); เพื่อสร้าง Object ประเภท Quadric ให้ theObject
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
gluQuadricDrawStyle(theObj,GLU_LINE);
glRotatef(++i%360,1.0,1.0,0.0);
gluSphere(theObj,20.0,50,20);
glPopMatrix();
glutSwapBuffers();
}
อธิบายทีละคำสั่งแล้วกัน
glPushMatrix();
ใช้เพื่อคัดลอก Matrix ลง Stack
gluQuadricDrawStyle(theObj,GLU_LINE);
ใช้กำหนดลักษณะการวาด โดย Parameter แรก คือ Object ที่ต้องการกำหนด Parameter ที่สองคือลักษณะที่ต้องการวาด โดยสามารถเลือกได้ทั้ง GLU_LINE
ที่วาดเป็นเส้น GLU_FILL
วาดเป็นทรงทึบ และ GLU_POINT
วาดเป็นจุด
glRotatef(++i%360,1.0,1.0,0.0);
ทำให้มันหมุนทวนเข็มนาฬิกา โดย Parameter แรกคือมุมที่ต้องการให้หมุน(หน่วยเป็น องศา) Parameter ที่ 2 3 4 คือ x y z โดยอยากให้หมุนรอบแกนไหนก็ใส่เป็น 1.0 แต่ถ้าใส่ 0.0 จะไม่หมุน
gluSphere(theObj,20.0,50,20);
สร้างรูปทรงกลม โดยใน OpenGL นั้นรูปทรงแบบ Quadric จะมีด้วยกันทั้งหมด 3 แบบ ได้แก่ Sphere, Cylinder และ Disk ซึ่งในการสร้างรูปทรงแต่ละแบบนั้นก็จะมี Parameter ในการสร้างต่างกันไป ดังนี้
- Sphere ทรงกลม นั้น Parameter แต่ละตัวคือ Object ที่จะสร้าง, รัศมี, จำนวนเส้นแนวนอน, จำนวนเส้นแนวตั้ง ตามลำดับ
- Cylinder ทรงกรวย จะมี Parameter 6 ตัวคือ Object ที่จะสร้าง , รัศมีที่ฐาน, รัศมีที่ยอด, ส่วนสูง, จำนวนเส้นนอน,จำนวนเส้นแนวตั้ง
- และสุดท้าย Disk เป็นจาน Parameter มี 5 ตัวคือ Object ที่จะสร้าง, รัศมีวงใน, รัศมีวงนอก, จำนวนเส้น, จำนวนวง
glPopMatrix();
นำ Matrix ออกจาก Stack
glutSwapBuffers();
เป็นคำสั่งที่นำสิ่งที่วาดไว้ออกมาแสดงบนหน้าจอ
void reshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h && w>0)
glOrtho(-SIZEW,SIZEW,(GLdouble)-h/w*SIZEW,(GLdouble)h/w*SIZEW,0.0,3*SIZEW);
else
glOrtho((GLdouble)-w/h*SIZEW,(GLdouble)w/h*SIZEW,-SIZEW,SIZEW,0.0,3*SIZEW);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-SIZEW);
}
ส่วนนี้ไม่รู้จะอธิบายยังไง ลอกเขามา…(ขอโทษด้วย)
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("Tranformation");
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display1);
glutIdleFunc(display1);
glutMainLoop();
}
เมื่อลอง Run ดูก็จะได้รูปทรงกลมอันนึงหมุนติ้ว ๆ
ปล.ไม่ได้ลองรันดูนะครับ ผิดพลาดประการไดก็ขอโทษด้วย
ปล.2 ใครรันไม่ผ่าน ติดตรงไหนก็บอกด้วยนะครับ จะได้แก้ไขให้
ปล.3 uou~
ปล.4 Tag Entry นี้เวิ่นเว้อจังเฮ้ย…
Comments
thx so much
>—— Build started: Project: cycle, Configuration: Debug Win32 ——
1>Compiling…
1>cycle.cpp
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : error C2065: ‘amp’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : warning C4554: ‘&’ : check operator precedence for possible error; use parentheses to clarify precedence
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : error C2143: syntax error : missing ‘)’ before ‘;’
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : warning C4390: ‘;’ : empty controlled statement found; is this the intent?
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : error C2065: ‘amp’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(26) : error C2059: syntax error : ‘)’
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2146: syntax error : missing ‘;’ before identifier ‘glOrtho’
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : warning C4552: ‘>’ : operator has no effect; expected operator with side-effect
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(27) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(28) : error C2181: illegal else without matching if
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(29) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(29) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(29) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(29) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(29) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(32) : error C2065: ‘SIZEW’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(36) : error C2065: ‘amp’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(36) : error C2143: syntax error : missing ‘)’ before ‘;’
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(36) : error C2059: syntax error : ‘)’
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(44) : error C2065: ‘display1’ : undeclared identifier
1>c:\documents and settings\pawana.p\my documents\visual studio 2008\projects\cycle\cycle\cycle.cpp(45) : error C2065: ‘display1’ : undeclared identifier
1>Build log was saved at “file://c:\Documents and Settings\pawana.p\My Documents\Visual Studio 2008\Projects\cycle\cycle\Debug\BuildLog.htm”
1>cycle – 22 error(s), 3 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Author
amp แก้แล้วนะครับ
แต่พวก SIZEW อะไรพวกนี้ต้องกำหนดขึ้นมาเองนะครับ…ขอโทษด้วย