OpenGL
OpenGL: Bentuk
Posted on .Dalam artikel terdahulu kita ada membincangkan mengenai bagaimana untuk melukis bentuk primitif menggunakan OpenGL yang mana bentuk-bentuk ini adalah bentuk 2D. Kali ini kita akan cuba untuk melukis bentuk-bentuk yang lebih kompleks dalam 3D.
Bentuk 3D hanyalah hasil dari bentuk 2D yang dilukis dalam ruang 3D. OpenGL tidak memberi fungsi untuk melukis bentuk-bentuk 3D seperti kiub, sfera dan piramid tetapi kita boleh membina bentuk-bentuk ini sendiri dengan menggabungkan vertex 2D. Salah satu cara lain adalah dengan menggunakan GLUT untuk membina bentuk-bentuk 3D yang mudah.
Berikut merupakan senarai bentuk-bentuk GLUT yang oleh dicuba.
glutWireCube(double size);
glutSolidCube(double size);
glutWireSphere(double radius, int slices, int stacks);
glutSolidSphere(double radius, int slices, int stacks);
glutWireCone(double radius, double height, int slices, int stacks);
glutSolidCone(double radius, double height, int slices, int stacks);
glutWireTorus(double inner_radius, double outer_radius, int sides, int rings);
glutSolidTorus(double inner_radius, double outer_radius, int sides, int rings);
glutWireTeapot(double size);
glutSolidTeapot(double size);
Untuk artikel ini kita akan cuba untuk melukis rangka sfera dengan menggunakan glutWireSphere.
void papar(void){
glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // Tukar background kepada warna merah
glClear(GL_COLOR_BUFFER_BIT); // Kosongkan buffer warna
glLoadIdentity(); //
glTranslatef(0.0f, 0.0f, -5.0f); // alihkan kamera menjauhi paksi z
//binaPrimitif(); // Bina bentuk primitif
glutWireSphere(1.0f, 8.0f, 8.0f);
glFlush(); // Hantar buffer ke tetingkap
}
Kompil kod ini dan anda akan dapat melihat sfera ini dari pandangan kamera pada kedudukan (0,0,5).
main.cpp
#include
#include
void binaPrimitif(void){
glBegin(GL_QUADS);
glColor3f(0.0f, 0.0f, 1.0f); // bucu berwarna biru
glVertex3f(-1.0f, -1.0f, 0.0f);
glColor3f(1.0f, 0.0f, 0.0f); // bucu berwarna merah
glVertex3f(-1.0f, 1.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f); // bucu berwarna hijau
glVertex3f(1.0f, 1.0f, 0.0f);
glColor3f(1.0f, 1.0f, 0.0f); // bucu berwarna kuning
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();
}
void tekanKekunci(unsigned char key, int x, int y) {
switch (key) {
case 27: // Keluar dari program
exit(0) ;
break ;
default:
break ;
}
}
void lepasKekunci(unsigned char key, int x, int y) {
}
void papar(void){
glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // Tukar background kepada warna merah
glClear(GL_COLOR_BUFFER_BIT); // Kosongkan buffer warna
glLoadIdentity(); //
glTranslatef(0.0f, 0.0f, -5.0f); // alihkan kamera menjauhi paksi z
//binaPrimitif(); // Bina bentuk primitif
glutWireSphere(1.0f, 8.0f, 8.0f);
glFlush(); // Hantar buffer ke tetingkap
}
void reshape(int width, int height){
glViewport(0, 0, (GLsizei)width, (GLsizei)height); //
glMatrixMode(GL_PROJECTION); // Tukar kepada projection matrix
glLoadIdentity(); //
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 100.0); // fov, aspect ratio, near and far plane
glMatrixMode(GL_MODELVIEW); // Tukar semula ke modelview matrix
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Tetingkap pertama saya");
// Now, we define callbacks and functions for various tasks.
glutDisplayFunc(papar);
glutReshapeFunc(reshape);
glutKeyboardFunc(tekanKekunci);
glutKeyboardUpFunc(lepasKekunci);
glutMainLoop(); // Start the main code
return 0; /* ANSI C requires main to return int. */
}
Fairuz
http://www.tutorialmelayu.comSystem Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,
There are no comments.