Dalam tutorial kali ini, kita akan belajar membuat model sangkar burung 3D sederhana menggunakan OpenGL dan GLUT. Sangkar ini dibuat dengan menggabungkan bentuk kerucut di atas dan tabung di bawah, menyerupai bentuk sangkar.
Berikut ini adalah contoh program C++ lengkapnya:
Source Code: Membuat Sangkar Burung
// Membuat Sangkar Burung
#include <windows.h>
#include <math.h>
#include <gl/glut.h>
#define PI 3.14
GLint circle_points = 40; // Banyaknya titik untuk membentuk lingkaran
// Fungsi untuk membuat kerucut (bagian atas sangkar)
void MyCone(GLfloat radius, GLfloat tinggi) {
GLint i;
GLdouble theta, ntheta;
for (i = 0; i < circle_points; i++) {
glBegin(GL_POLYGON);
theta = (2 * PI * i / circle_points);
ntheta = (2 * PI * (i + 1) / circle_points);
glVertex3f(radius * cos(theta), 1, radius * sin(theta));
glVertex3f(0, 0.8, 2); // Titik puncak kerucut
glVertex3f(radius * cos(ntheta), 1, radius * sin(theta));
glEnd();
}
}
// Fungsi untuk membuat tabung (badan sangkar)
void MyTube(GLfloat radius, GLfloat tinggi) {
GLint i;
GLdouble theta, ntheta;
for (i = 0; i < circle_points; i++) {
glBegin(GL_POLYGON);
theta = (2 * PI * i / circle_points);
ntheta = (2 * PI * (i + 1) / circle_points);
glVertex3f(0, 0, 0); // Titik pusat bawah
glVertex3f(radius * cos(theta), 0, radius * sin(theta));
glVertex3f(radius * cos(ntheta), 0, radius * sin(ntheta));
glVertex3f(radius * cos(ntheta), tinggi, radius * sin(ntheta));
glVertex3f(radius * cos(theta), tinggi, radius * sin(theta));
glVertex3f(radius * cos(theta), 0, radius * sin(theta));
glEnd();
}
}
// Fungsi untuk menampilkan objek
void Display(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 1); // Warna objek putih
MyCone(0.5, 1); // Membuat kerucut
MyTube(0.4, 1); // Membuat tabung
glFlush();
}
// Fungsi reshape untuk menyesuaikan perspektif
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glFrustum(-0.5 * (GLfloat)w/h, 0.5 * (GLfloat)w/h, -0.5, 0.5, 1, 20);
gluLookAt(0, 0.5, 3, 0, 0, -100, 0, 1, 0);
}
// Fungsi inisialisasi awal
void init(void) {
glClearColor(0, 0, 0, 0); // Latar belakang hitam
glPolygonMode(GL_FRONT, GL_LINE); // Mode wireframe
glPolygonMode(GL_BACK, GL_LINE);
}
// Fungsi utama
int main(int argc, char* argv[]) {
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(500, 200);
glutCreateWindow("Sangkar Burung");
init();
glutDisplayFunc(Display);
glutReshapeFunc(reshape);
glutMainLoop();
}
Penjelasan Program
-
MyCone()
: Membuat bentuk kerucut di bagian atas sangkar menggunakan 40 titik untuk menghasilkan bentuk yang halus. -
MyTube()
: Membuat bentuk tabung untuk badan sangkar, juga dengan 40 titik. -
Display()
: Memanggil kedua fungsiMyCone()
danMyTube()
untuk menggambar seluruh sangkar. -
reshape()
: Mengatur viewport dan frustum agar objek 3D terlihat proporsional. -
init()
: Mengatur latar belakang hitam dan mode wireframe supaya hanya kerangka sangkar yang terlihat.
Hasil Output
Saat program dijalankan, akan tampil sebuah sangkar burung 3D berwarna putih di atas latar belakang hitam. Karena menggunakan mode wireframe, tampilannya hanya berupa garis-garis pembentuk bentuk tabung dan kerucut.
Tips Pengembangan
-
Ingin sangkarnya solid? Ganti
glPolygonMode(GL_FRONT, GL_FILL);
. -
Ingin sangkarnya berputar? Tambahkan rotasi di fungsi
Display()
. -
Bisa juga menambahkan burung kecil atau detail kawat menggunakan garis tambahan.
Komentar
Posting Komentar