OpenGL (Open Graphics s Library) เป็นมาตรฐานการอินเตอร์เฟฟส ...

plainspecialΛογισμικό & κατασκευή λογ/κού

14 Δεκ 2013 (πριν από 3 χρόνια και 5 μήνες)

157 εμφανίσεις

1
/
7

ในส

วนนี

เป็นค ำสั

งที่ใช้เตรียม

Windows
ส ำหรับ

OpenGL,
กำรตั

งค

ำพำรำมิเตอร์พื

นฐำนต

ำงๆ
,
กำรฉำยวัตถุลงบนหน้ำจอ
,
และกำรรับค ำสั

งจำกคีย์บอร์ด



I
. การ

Setup GLUT
ส ำหรับ

Visual C++.NET

1.
ดำวน์โหลดไฟล์

glut
-
3.7.6
-
bin.zip
จำก

http://pirun.ku.ac.th/~faasppp


ไฟล์นี

ประกอบด้วยไฟล์ย

อย

3
ไฟล์คือ

glut.h, glut32.lib,
และ

glut32.dll

2.
คัดลอกไฟล์

glut.h
ไปไว้ที่


C:
\
Program Files
\
Microsoft Visual Studio 8
\
VC
\
PlatformSDK
\
Include
\
gl

3.
คัดลอกไฟล์

glut32.lib
ไปไว้ที่

C:
\
Program Files
\
Microsoft Visual Studio 8
\
VC
\
PlatformSDK
\
Lib

4.
คัดลอกไฟล์

glut32.dll
ไปไว้ที่

C:
\
Windows
\
system32


II
. การสร้าง
project
ใน

Visual C++.NET
และรัน

ขั

นตอนที่ 1





ขั

นตอนที่ 2











ขั

นตอนที่ 3





ขั

นตอนที่ 4









2
/
7

ขั

นต
อนที่ 5



เมื่อรันจะได้ผลลัพธ์ดังนี













3
/
7

อธิบำยโปรแกรม

#include <GL/glut.h>

void mydisplay(){




glClear(GL_COLOR_BUFFER_BIT);


glBegin(GL_POLYGON);



glVertex2f(
-
0.5,
-
0.5);



glVertex2f(
-
0.5, 0.5);



glVerte
x2f(0.5, 0.5);



glVertex2f(0.5,
-
0.5);


glEnd();


glFlush();

}

int main(){


glutCreateWindow("A Simple Graphics");


glutDisplayFunc(mydisplay);


glutMainLoop();


return 0;

}


ฟั่งก์ชั่นต่างๆ ใน
main
เพิ่มเติม

glutCreat
eWindow
(char *title)

:
สร้าง
window
และก

าหนด
Title Bar

glutDisplayMode(
GLUT_SINGLE|GLUT_RGB
) :
ประเภทของ
window

glutInitWindowSize(
int Width,int Height
) :
ขนาดของหน้าต

าง

glutInitWindowPositon(
int x, int y)

:
ต าแหน

งเริ

มต้นของการแสดงผล









4
/
7

การสร้าง
pr
ojection
แบบ ขนาน


void

init (
void
){


glClearColor (1.0, 1.0, 1.0, 0.0);




glLineWidth(2.0);





glMatrixMode (GL_PROJECTION);


glLoadIdentity ();



gluOrtho2D (
-
100.0, 100.0,
-
100.0, 100.0);

}


void

myDisplay (
void
){


glClear (GL_COLOR_BUFFER_BIT);


glColor3f (0.0, 0.0, 1.0);





glBegin (GL_TRIANGLES);





glVertex2i (
-
50,
-
25);





glVertex2i ( 50,
-
25);





glVertex2i ( 0, 50);





glEnd ( );



glFlush ( );

}

void

main (
int

argc,
char
** argv){


glutInit (&argc, argv);





glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);



glutInitWindowPosition (50, 100);





glutInitWindowSize (600, 300);





glutCreateWindow (
"parallel projection"
);


init ( );







glutDisplayFunc (myDisplay);




glutMainLoop ( );




}


การทรานสฟอร์มเมชั่น ด้วยการกดแป้น

keyboard


ฟังชั


glRotatef(Glfloat angle, Glfloat x, Glfloat y, Glfloat z)


โดยที่
angle :

คือมุมที่ต้องการให้หมุน(เป็นองศา)





X :
คือก

าหนดให้หมุนตามแนวแกน
X





Y :
คือก

าหนดให้หมุนตามแนวแกน
Y




Z :
คือก

าหนดให้หมุนตามแนวแกน
Z


ฟังก์ชั่น
glPushMatrix () glPopMatrix()

ใช้ส าหรับเก

บสถานะเมตริกซ์ในการวาดแต

ละรอบหรือเมื่อมีการเปลี่ยนพิก

ดใน
GL_MODELVIEW
หรือ
GL_PROJECTION


5
/
7

ฟังก์ชั่น
glutSwapBuffers()

เพื่อให้
OpenGl
สลับการใช้งาน
Fr
ont
และ

Back Buffer
ซึ่งการใช้งานจะขึ้นอยู่กับ
glutInitDisplayMode (

);

ถ้าจะใช้โหมด
GLUT_SINGLE
ก็ต้องใช้
glFlush()
แทน

#include <stdio.h>

GLfloat xangle=0.0,yangle=0.0;

GLint window;




void init (void){


glClearColor (1.0, 1.0, 1.0, 0.
0);



glLineWidth(1.0);






glColor3f (1.0, 0.0, 0.0);




glMatrixMode (GL_PROJECTION);


glLoadIdentity ();



glOrtho(
-
6,6,
-
6,6,
-
6,6);

}

void myDisplay (void){


glClear (GL_COLOR_BUFFER_BIT);



glPushMatrix();


glBegin (GL_LINES);





// Draw
x
-
axis



glVertex2f (
-
5.5, 0.0);



glVertex2f ( 5.5, 0.0);


glEnd ( );


glBegin (GL_LINES);





// Draw y
-
axis



glVertex2f (0.0,
-
5.5);



glVertex2f (0.0, 5.5);


glEnd ( );


glRotatef(xangle,1.0,0.0,0.0);





glBegin (GL_POLYGON);



glVertex2f (1.0, 1.0);



glVertex2f (4.0, 1.0);



glVertex2f (1.0, 5.0);


glEnd ( );


glPopMatrix();


glutSwapBuffers();


glFlush ( );

6
/
7

}



void KeyboardAssign (GLubyte key, GLint x, GLint y) {


switch ( key ) {


case ESCAPE :


exit(0);








break;







case 'x':


xangle +=
10.0
;






glColor3f (0.0, 0.0, 1.0);




glutPostRedisplay();


break;


}

}

void main (int argc, char** argv){


glutInit (&argc, argv);


glutInitDisplayMode (GLUT_
DOUBLE

| GLUT_RGB);


glutInitWindowPosition (50, 50);


glutInitWindowSize(500, 500);



glutCreateWindow("Transformation
-
Translation
" );



init();






glutDisplayFunc(myDisplay);



glutKeyboardFunc(KeyboardAssign);


glutMainLoo
p();




}









7
/
7