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