OpenGL
Tetingkap OpenGL
Posted on .- Tetingkap OpenGL
- Menukar saiz tetingkap OpenGL
Kali ini kita akan belajar bagaimana untuk membina tetingkap menggunakan OpenGL, GLUT dan GLEW. OpenGL juga dikenali sebagai Open Graphics Library, adalah satu library khas untuk aturcara grafik 3D.
Install glut dan glew.
sudo apt-get install freeglut3-dev glew-utils libglew1.6-dev libfreeimage-dev build-essential
Aturcara
Kita mulakan dengan include glut dan juga glew:
#include
#include
Kemudian bina fungsi main anda seperti biasa.
int main(int argc, char** argv){
}
GLUT
Ok, sekarang kita akan mulakan dengan memulakan glut
glutInit(&argc, argv);
Setelah memulakan GLUT, kita akan mula memilih mod-mod yang perlu. Sebagai contoh jika kita mahu menggunakan satu ata udua buffer, jika mahu depth buffer dan sebagainya. Untuk artikel pertama ini, kita akan hanya menggunakan satu buffer.
glutInitDisplayMode (GLUT_SINGLE);
Selepas ini, kita boleh menukar saiz dan posisi tetingkap GLUT.
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
Setelah selesai, kita akan membina tetingkap GLUT.
glutCreateWindow ("Tetingkap pertama saya");
Ok, jika anda kompil fail ini sekarang (menggunakan Makefile yang disertakan di bawah), sememangnya anda akan dapat melihat tetingkap GLUT tetapi ianya akan tertutup dengan serta merta. Kita memerlukan beberapa lagi panggilan fungsi. Sebagai contoh, kita memerlukan satu fungsi yang dipanggil papar yang kita perlu berikan kepada glut (sebagai callback) supaya glut boleh memanggil fungsi ini sekiranya ia mahu memaparkan sesuatu ke tetingkap glut.
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(); //
glFlush(); // Hantar buffer ke tetingkap
}
glutDisplayFunc(papar);
Kemudian anda perlu memberitahu glut untuk masuk ke dalam “main loop” supaya tetingkap yang dibina tidak tertutup dengan serta merta.
glutMainLoop();
Jika semuanya berjalan lancar, anda sepatutnya mempunyai tetingkap dengan latar belakang berwarna merah.
main.cpp
#include
#include
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(); //
glFlush(); // Hantar buffer ke tetingkap
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Tetingkap pertama saya");
glutDisplayFunc(papar);
glutMainLoop();
return 0;
}
Makefile
CC = g++
CFLAGS = -g -DGL_GLEXT_PROTOTYPES -I./include/ -I/usr/X11R6/include -I/sw/include \
-I/usr/sww/include -I/usr/sww/pkg/Mesa/include
LDFLAGS = -L./lib/nix -L/usr/X11R6/lib -L/sw/lib -L/usr/sww/lib \
-L/usr/sww/bin -L/usr/sww/pkg/Mesa/lib -lglut -lGLU -lGL -lX11 -lGLEW -lfreeimage
RM = /bin/rm -f
all: mytest
mytest: main.o
$(CC) $(CFLAGS) -o mytest main.o $(INCFLAGS) $(LDFLAGS)
main.o: main.cpp
$(CC) $(CFLAGS) $(INCFLAGS) -c main.cpp
clean:
$(RM) *.o mytest
Fairuz
http://www.tutorialmelayu.comSystem Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,
There are no comments.