Kamis, 21 Mei 2015

Program Pertama OpenGL 2D

Dari depan laptop, ditemani roti dan secangkir kopi

Pagi semuanya.....eh maaf saya ngak tau kapan Anda membaca ini (siang, sore, subuh, malem, dll), tetapi pada saat aku menulis ini keadaan masih pagi sekali, belum jam 8 waktu saat ini.


Sekarang kita semua akan belajar pemrograman grafik OpenGL 2D, kita mulai dari program yang sangat sederhana supaya tidak pusing. Hasil program akan tampak seperti gambar di bawah ini, sebuah kotak dan sebuah garis lurus (eh sorry semua garis pasti lurus ya).


Program pertama yang aku posting ini dibuat dengan menggunakan project Win32 Console Application. Untuk membuat project baru Win32 Console Application di Visual Studio 2013 cara nya klik link ini yang ada garis bawah panjang.

Setelah Anda bisa membuat project baru, barulah Anda bisa meneruskan ke tahap berikutnya.

Program ini membutuhkan header dan library tambahan, eh eh jangan takut, header dan library tambahan telah disediakan di blog ini (aku baek kan...heheheh) jadi ngak usah repot-repot searching, klik sana klik sini lalu download.

GLAUX.h dan GLAUX.Lib, dua file ini dibutuhkan untuk membuat program ini, dan harus Anda tambahkan ke dalam program yang Anda buat. Kedua file ini aku sertakan di dalam project yang dapat Anda download dan aku tempatkan di folder GLAUX.

Ok sekarang bagian serius nih, kita mulai yah.

Tambahkan header yang dibutuhkan ke dalam program Anda.

//header yang dibutuhkan
#include <windows.h>
#include <stdio.h>

//OpenGL header
#include <GL/gl.h>
#include "glaux/glaux.h" //header ini ada di dalam folder GLAUX

Lalu tambahkan juga Link Library (nambah terus ngak usah bayar, kalo di warung nambah harus bayar lagi).

//link library
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "GLAUX/glaux.lib") //library ini ada di dalam folder GLAUX

Inisialisi window untuk tempat grafik, bahasa sederhanya kasih tau window untuk nyiapin tempat bagi grafik Anda (seperti jika ada tamu nginep di rumah Anda, maka kasih tempat untuk tidur, jangan suruh tidur diluar ntar error dah)

void __stdcall WindowSize(GLsizei w, GLsizei h)
{
    //matriks di bawah memakai cara stack/tumpukan
    //dengan sistem LIFO(last in first out),
    //deklarasi matriks proyeksi dan matriks model view
    //tidak boleh terbalik

    //mengaktifkan matriks proyeksi
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    //memakai pandangan 2D
    //gluOrtho2D(-Xmax, Xmax, -Ymax, Ymax);
    gluOrtho2D(-50, 50, -50, 50);

    //mengaktifkan matriks model view
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    printf("WindowSize\n");
}

Sekarang kita tampilkan grafik ke layar monitor atau di tempat yang telah disediakan sebelumnya (ngak usah bayar ini tempat ngak usah sewa gratis koq).

void __stdcall DisplayGrafik()
{
    //clear buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    //Kotak
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex2d(-30.0, -10.0);
    //titik kanan bawah
    glVertex2d(20.0, -10.0);
    //titik kanan atas
    glVertex2d(20.0, 10.0);
    //titik kiri atas
    glVertex2d(-30.0, 10.0);
    glEnd();

    //garis miring
    glBegin(GL_LINE_LOOP);
    //titik atas
    glVertex2d(30.0, 40.0);
    //titik bawah
    glVertex2d(40.0, -20.0);
    glEnd();
   

    //swap grafik buffer
    auxSwapBuffers();
}

Terakhir kita panggil main program untuk urus tempat grafik dan display grafik (seperti panitia di suatu event gitu bahasa kerennya).

int _tmain(int argc, _TCHAR* argv[])
{
    //inisialisasi OpenGL
    auxInitDisplayMode(AUX_RGB | AUX_DOUBLE);

    //inisialisasi window OpenGL
    auxInitPosition(Kiri, Kanan, Lebar, Tinggi);
    auxInitWindow(argv[0]);

    //warna latar belakang abu-abu
    glClearColor(0.5, 0.5, 0.5, 0.0);

    //menghitung matriks proyeksi dan matriks model view
    auxReshapeFunc(WindowSize);

    //proses looping untuk menampilkan objek 2D
    auxIdleFunc(DisplayGrafik);
    auxMainLoop(DisplayGrafik);

    return 0;
}

Ini dia source code lengkap program ini (dapat Anda copy paste, mau cantumin author atau tidak itu hak Anda aku tidak akan protes apalagi sampai demontrasi ke gedung DPR):

// Pertama_OpenGL_2D.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

//header yang dibutuhkan
#include <windows.h>
#include <stdio.h>

//OpenGL header
#include <GL/gl.h>
#include "glaux/glaux.h" //header ini ada di dalam folder GLAUX

//link library
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "GLAUX/glaux.lib") //library ini ada di dalam folder GLAUX

//ukuran window (warna abu-abu)
int Lebar = 500;
int Tinggi = 500;
//sudut kiri window (posisi awal window)
int Kiri = 100;
int Kanan = 100;

void __stdcall DisplayGrafik()
{
    //clear buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    //Kotak
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex2d(-30.0, -10.0);
    //titik kanan bawah
    glVertex2d(20.0, -10.0);
    //titik kanan atas
    glVertex2d(20.0, 10.0);
    //titik kiri atas
    glVertex2d(-30.0, 10.0);
    glEnd();

    //garis miring
    glBegin(GL_LINE_LOOP);
    //titik atas
    glVertex2d(30.0, 40.0);
    //titik bawah
    glVertex2d(40.0, -20.0);
    glEnd();
   

    //swap grafik buffer
    auxSwapBuffers();
}

void __stdcall WindowSize(GLsizei w, GLsizei h)
{
    //matriks di bawah memakai cara stack/tumpukan
    //dengan sistem LIFO(last in first out),
    //deklarasi matriks proyeksi dan matriks model view
    //tidak boleh terbalik


    //mengaktifkan matriks proyeksi
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    //memakai pandangan 2D
    //gluOrtho2D(-Xmax, Xmax, -Ymax, Ymax);
    gluOrtho2D(-50, 50, -50, 50);

    //mengaktifkan matriks model view
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    printf("WindowSize\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
    //inisialisasi OpenGL
    auxInitDisplayMode(AUX_RGB | AUX_DOUBLE);

    //inisialisasi window OpenGL
    auxInitPosition(Kiri, Kanan, Lebar, Tinggi);
    auxInitWindow(argv[0]);

    //warna latar belakang abu-abu
    glClearColor(0.5, 0.5, 0.5, 0.0);

    //menghitung matriks proyeksi dan matriks model view
    auxReshapeFunc(WindowSize);

    //proses looping untuk menampilkan objek 2D
    auxIdleFunc(DisplayGrafik);
    auxMainLoop(DisplayGrafik);

    return 0;
}


Selamat Belajar Rekan-Rekan

Salam Hangat Selalu (padahal kopinya udah dingin, tapi tetap hangat selalu)


Heriady
heriady.yoh@gmail.com


Ini dia yang ditunggu Download project-nya lengkap jadi Anda tinggal Run saja, ngak capek ngetik, ngak capek copy paste, dan lain-lain.


Artikel terkait
Cara membuat Win32 Console Application Project