Membuat Stick Figure Sederhana dengan OpenGL di C++

Codeblocks,Komputer Grafik

OpenGL adalah pustaka grafis yang digunakan untuk menggambar objek 2D dan 3D. Dalam artikel ini, kita akan membuat bentuk stick figure sederhana menggunakan OpenGL di C++. Proyek ini akan mencakup pembuatan roda, garis tubuh, dan beberapa elemen lainnya untuk membentuk gambar yang menyerupai sebuah sepeda.

Persiapan Awal

Sebelum memulai, pastikan Anda memiliki OpenGL dan GLUT (OpenGL Utility Toolkit) terinstal di sistem Anda. GLUT digunakan untuk membuat jendela, menangani input, dan membuat pengaturan tampilan grafis di OpenGL. Berikut adalah struktur dasar kode yang digunakan untuk menggambar bentuk stick figure:

Langkah-langkah Membuat Stick Figure

  1. Menyiapkan Lingkungan OpenGL Kita perlu mengatur beberapa pengaturan awal untuk menggambar objek dengan menggunakan OpenGL. Ini termasuk pengaturan warna latar belakang, pengaturan ketebalan garis, dan pengaturan lainnya seperti antialiasing dan blending untuk efek transparansi.

  2. Membuat Fungsi untuk Menggambar Lingkaran Untuk menggambar lingkaran (seperti roda sepeda), kita membuat sebuah fungsi MyCircle2f yang menerima parameter seperti pusat lingkaran dan radius, kemudian menggambar lingkaran dengan menggunakan trigonometri.

  3. Menggambar Rangkaian Garis dan Elemen Lain Setelah membuat lingkaran, kita menggambar garis-garis tubuh dan berbagai bagian lainnya dari stick figure, seperti roda, stang sepeda, sadel, dan bagian tubuh.

Kode Program

#include <windows.h>
#include <gl/glut.h>
#include <math.h>

#define PI 3.1415926
GLint circle_points = 1000;

void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
    GLint i;
    GLdouble theta;
    glClear(GL_COLOR_BUFFER_BIT);
    for(i = 0; i < circle_points; i++)
    {
        theta = 2 * PI * i / circle_points;
        glVertex2f(centerx + radius * cos(theta), centery + radius * sin(theta));
    }
}

void reshape(int w, int h)
{
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 320.0, 0.0, 240.0);
}

void init()
{
    glEnable(GL_LINE_SMOOTH);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA);
    glHint(GL_LINE_SMOOTH_HINT | GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);
    glClearColor(1.0, 0.0, 0.0, 1.0);
    glLineWidth(3);
}

void Display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    // Membuat roda
    glBegin(GL_LINE_STRIP);
    glColor3f(0, 0, 0);
    MyCircle2f(50, 50, 50);
    glEnd();

    glBegin(GL_LINE_STRIP);
    MyCircle2f(200, 50, 50);
    glEnd();

    glBegin(GL_LINE_STRIP);
    MyCircle2f(120, 50, 15);
    glEnd();

    // Garis tubuh
    glBegin(GL_LINE);
    glVertex2f(50, 50);
    glVertex2f(105, 50);
    glEnd();

    glBegin(GL_LINE_STRIP);
    glVertex2f(50, 50);
    glVertex2f(90, 120);
    glVertex2f(120, 65);
    glEnd();

    // Sadel sepeda
    glBegin(GL_TRIANGLES);
    glVertex2f(73, 128);
    glVertex2f(87, 108);
    glVertex2f(110, 124);
    glEnd();

    // Stang sepeda
    glBegin(GL_LINE_STRIP);
    glVertex2f(200, 50);
    glVertex2f(180, 140);
    glVertex2f(150, 145);
    glVertex2f(210, 135);
    glEnd();

    glBegin(GL_LINE);
    glVertex2f(133, 55);
    glVertex2f(185, 110);
    glEnd();

    glBegin(GL_LINE);
    glVertex2f(112, 75);
    glVertex2f(184, 117);
    glEnd();

    glFlush();
}

int main(int args, char* argv[])
{
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(320, 240);
    glutCreateWindow("Window OpenGL Pertama Saya");
    init();
    glutDisplayFunc(Display);
    glutReshapeFunc(reshape);
    glutMainLoop();
}
Codeblocks,Komputer Grafik,

Penjelasan Kode

  1. Fungsi MyCircle2f: Fungsi ini digunakan untuk menggambar lingkaran. Menggunakan rumus trigonometri untuk menghitung titik-titik pada lingkaran, kemudian menggambarnya menggunakan OpenGL.

  2. Fungsi reshape: Fungsi ini mengatur area tampilan ketika ukuran jendela diubah, memastikan rasio aspek tetap sesuai.

  3. Fungsi init: Fungsi ini mengaktifkan beberapa pengaturan dasar, seperti efek antialiasing dan transparansi untuk garis, serta pengaturan warna latar belakang dan lebar garis.

  4. Fungsi Display: Fungsi ini menggambar objek di layar. Di sini kita menggambar dua roda sepeda, stang, sadel, dan tubuh sepeda menggunakan kombinasi garis dan bentuk lainnya.

  5. Fungsi main: Fungsi utama untuk inisialisasi jendela dan menjalankan loop rendering OpenGL. Fungsi ini juga mengatur tampilan dan ukuran jendela.

Kesimpulan

Dengan kode ini, Anda dapat membuat bentuk stick figure sederhana dengan menggunakan OpenGL di C++. Program ini menggambar roda sepeda, tubuh, dan stang dengan menggunakan garis dan bentuk geometris dasar. Anda dapat mengembangkan lebih lanjut dengan menambahkan fitur lain seperti animasi atau memperhalus bentuk objek yang lebih kompleks.

Komentar