OpenGL/Empat subwindows
Penampilan
< OpenGL
Penerangan kod sumber bagi 4 Subwindows
#include <GL/glut.h> // fail header untuk GLUT
#include <stdio.h> // fail header untuk stdio
#define GAP 10
int main_w, w1, w2, w3, w4; // pengisytiharan setiap pembolehubah untuk mewujudkan 4 subwindows.
void
display(void) // berfungsi untuk memaparkan set dan imej
{
glClear(GL_COLOR_BUFFER_BIT); //menghilangkan latar belakang objek
glFlush(); // berkuat kuasa pelaksanaan arahan GL dalam masa terhingg
}
void
vis(int visState)
{
printf("VIS: win=%d, v=%d\n", glutGetWindow(), visState);
}
void
reshape(int w, int h) // menentukan bentuk dan kedudukan objek dengan memberi nilai awal kepada 2 pembolehubah.
{
int width = 50; // mengisytihar dan menetapkan nilai awal pada pembolehubah width
int height = 50; // mengisytihar dan menetapkan nilai awal pada pembolehubah height
glViewport(0, 0, w, h); // menentukan jarak serta ruang antara setiap subwindows
if (w > 50) {
width = (w - 3 * GAP) / 2;
} else {
width = 10;
}
if (h > 50) {
height = (h - 3 * GAP) / 2;
} else {
height = 10;
}
glutSetWindow(w1); // mewujudkan tetingkap yang pertama
glutPositionWindow(GAP, GAP); //menentukan kedudukan tetingkap yang pertama
glutReshapeWindow(width, height); // menentukan saiz dan juga bentuk tetingkap berdasarkan lebar dan tinggi objek
glutSetWindow(w2); // mewujudkan tetingkap yang kedua
glutPositionWindow(GAP + width + GAP, GAP); // menentukan kedudukan tetingkap kedua iaitu bertentangan tetingkap pertama
glutReshapeWindow(width, height); // menentukan saiz dan juga bentuk tetingkap
glutSetWindow(w3); // mewujudakan tetingkap yang ketiga
glutPositionWindow(GAP, GAP + height + GAP); // menentukan kedudukan tetingkap ketiga, bersebelahan tetingkap pertama
glutReshapeWindow(width, height); // menentukan saiz dan juga bentuk tetingkap
glutSetWindow(w4); // mewujudkan tetingkap yang keempat
glutPositionWindow(GAP + width + GAP, GAP + height + GAP); // kedudukan tetingkap keempat bertentangan tetingkap ketiga
glutReshapeWindow(width, height); // menentukan saiz dan juga bentuk tetingkap
}
int
main(int argc, char **argv) // pembolehubah argc mengandungi beberapa arguments yang diluluskan oleh program , manakala argv adalah petunjuk kepada argument.
{
glutInit(&argc, argv); // nilai awal glut dalam rangka kerja
glutInitDisplayMode(GLUT_RGB); // menyediakan mod paparan
glutInitWindowSize(210, 210); // menetapkan nilai awal pada saiz setiap subwindows
main_w = glutCreateWindow("4 subwindows"); // mencipta 4 subwindows
glutDisplayFunc(display); // berfungsi untuk memaparkan setiap subwindows
glutVisibilityFunc(vis); // keterlihatan fungsi untuk setiap objek
glutReshapeFunc(reshape); // menentukan bentuk dan saiz setiap subwindows
glClearColor(1.0, 1.0, 1.0, 1.0); // menetapkan warna bagi setiap subwindows
w1 = glutCreateSubWindow(main_w, 10, 10, 90, 90);
glutDisplayFunc(display);
glutVisibilityFunc(vis);
glClearColor(1.0, 0.0, 0.0, 1.0);
w2 = glutCreateSubWindow(main_w, 110, 10, 90, 90);
glutDisplayFunc(display);
glutVisibilityFunc(vis);
glClearColor(0.0, 1.0, 0.0, 1.0);
w3 = glutCreateSubWindow(main_w, 10, 110, 90, 90);
glutDisplayFunc(display);
glutVisibilityFunc(vis);
glClearColor(0.0, 0.0, 1.0, 1.0);
w4 = glutCreateSubWindow(main_w, 110, 110, 90, 90);
glutDisplayFunc(display);
glutVisibilityFunc(vis);
glClearColor(1.0, 1.0, 0.0, 1.0);
glutMainLoop(); // proses pengulangan looping
return 0; /* ANSI C memerlukan laman utama untuk mengembalikan int. */
}