Kamis, 21 Mei 2015

Program Pertama OpenGL 3D

Sore semuanya, dengan kondisi agak mendung disini dan disertai dengan tiupan angin kencang


Salam sejahterah selalu rekan-rekan...

Berikut ini aku akan membagikan kepada rekan-rekan cara untuk membuat program grafik 3D sederhana. Tujuan dari kata sederhana ini biar rekan-rekan tidak pusing 7 atau 9 keliling. Kalo tukang es kelapa selalu keliling dia entah 7 atau 9 kali keliling dan besoknya tetap keliling. Emang hobi keliling ya.


Program ini akan menghasilkan dua buah bujur sangkar (merah dan hijau) yang berputar terus menerus (tidak akan pusing dia berputar dan tidak perlu dibayar).

Untuk membuat program ini rekan-rekan harap melakukan bebrapa hal di bawah ini.

Pertama ya harus tambahkan header.

//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

Kedua tambahkan juga Library nya.

//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

Berikutnya minta tolong kepada Om windows untuk menyiapkan tempat bagi program grafik rekan-rekan (langsung aja suruh ngak perlu bayar koq, Om windows nya juga pasti nurut deh).

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 3D perspektif
    gluPerspective(45.0, (GLfloat)w / (GLfloat)h, 1.0, 1000.0);

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

    printf("WindowSize\n");
}

Selanjutnya  display bujur sangkar merah dan hijau itu di tempat yang telah disiapkan oleh Om windows (disini kelihatan hati nurani Om windows, baek sekali uudah nyiapin tempat).

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

    //mundurkan objek sebanyak 5 satuan
    //ke arah sumbu -Z
    glTranslatef(0.0f, 0.0f, -5.0f);
    glRotatef(Sudut_Putar, 1.0f, 1.0f, 0.0f);

    Sudut_Putar += 0.1f;
    if (Sudut_Putar > 360.0f)
        Sudut_Putar = 0.0f;

    //Kotak 1 warna merah
    glColor3f(1.0f, 0.0f, 0.0f);
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex3f(-1.0f, -1.0f, 1.0f);
    //titik kanan bawah
    glVertex3f(1.0f, -1.0f, 1.0f);
    //titik kanan atas
    glVertex3f(1.0f, 1.0f, 1.0f);
    //titik kiri atas
    glVertex3f(-1.0f, 1.0f, 1.0f);
    glEnd();

    //Kotak 2 warna hijau
    glColor3f(0.0f, 1.0f, 0.0f);
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex3f(-1.0f, -1.0f, -1.0f);
    //titik kanan bawah
    glVertex3f(1.0f, -1.0f, -1.0f);
    //titik kanan atas
    glVertex3f(1.0f, 1.0f, -1.0f);
    //titik kiri atas
    glVertex3f(-1.0f, 1.0f, -1.0f);
    glEnd();

   
    //swap grafik buffer
    auxSwapBuffers();
}

Terakhir suruh deh main program menjalankan program 3D yang kita buat, selesai dah.

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);

    //perhitungan depth buffer diaktifkan
    glEnable(GL_DEPTH_TEST);

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

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

    return 0;
}

Pingin Copy Paste source code ini boleh, siapa takut, nih dia silahkan di share ke rekan-rekan yang lain, terserah mau dikasih author ato tidak ngak jadi masalah buat ogut.

// Pertama_OpenGL_3D.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;

float Sudut_Putar = 0.0f;

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

    //mundurkan objek sebanyak 5 satuan
    //ke arah sumbu -Z
    glTranslatef(0.0f, 0.0f, -5.0f);
    glRotatef(Sudut_Putar, 1.0f, 1.0f, 0.0f);

    Sudut_Putar += 0.1f;
    if (Sudut_Putar > 360.0f)
        Sudut_Putar = 0.0f;

    //Kotak 1 warna merah
    glColor3f(1.0f, 0.0f, 0.0f);
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex3f(-1.0f, -1.0f, 1.0f);
    //titik kanan bawah
    glVertex3f(1.0f, -1.0f, 1.0f);
    //titik kanan atas
    glVertex3f(1.0f, 1.0f, 1.0f);
    //titik kiri atas
    glVertex3f(-1.0f, 1.0f, 1.0f);
    glEnd();

    //Kotak 2 warna hijau
    glColor3f(0.0f, 1.0f, 0.0f);
    glBegin(GL_LINE_LOOP);
    //titik kiri bawah
    glVertex3f(-1.0f, -1.0f, -1.0f);
    //titik kanan bawah
    glVertex3f(1.0f, -1.0f, -1.0f);
    //titik kanan atas
    glVertex3f(1.0f, 1.0f, -1.0f);
    //titik kiri atas
    glVertex3f(-1.0f, 1.0f, -1.0f);
    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 3D perspektif
    gluPerspective(45.0, (GLfloat)w / (GLfloat)h, 1.0, 1000.0);

    //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);

    //perhitungan depth buffer diaktifkan
    glEnable(GL_DEPTH_TEST);

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

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

    return 0;
}


Selesai deh tugas ogut hari ini, see you next time.


Heriady
heriady.yoh@gmail.com


Ini dia yang ditunggu, download program nya secara lengkap, klik link ini untuk download


Artikel Terkait
Konsep Pandangan Pespektif 3D

Tidak ada komentar:

Posting Komentar