Rendering Garis Menggunakan OpenGL Dengan Bahasa Java
Dalam membuat Program
ini, saya menggunakan bahasa Java dengan IDE Netbeans 8.0.1 dan Library
penghubung antara IDE dengan OpenGL yaitu LWJGL
2.9.1 yang berjalan pada OS Windows 7 64bit.
Pada program ini,
codingan dibagi kedalam 4 file dalam class sendiri-sendiri yaitu LineMaker.java
untuk kodingan menu utama, Vertical.java untuk kodingan membuat garis vertikal,
Horizontal.java untuk kodingan membuat garis horizontal, dan Diagonal.java
untuk membuat garis diagonal.
Berikut adalah Source
code dan penjelasan masing-masing file (warna merah merupakan penjelasan pada
program)
1. LineMaker.java
import
java.util.*; /*memanggil library untuk fungsi scanner yang berguna
untuk inputan*/
import
org.lwjgl.LWJGLException; /*memanggil
library untuk menjalankan fungsi
pengecualian pada 'lwjgl'*/
public
class LineMaker {
public static void main(String[] args)
throws LWJGLException{
int pil; /*mendefinisikan variabel pil untuk menerima inputan
pilihan user nantinya*/
Scanner input = new Scanner(System.in); /*membuat fungsi inputan
menggunakan fungsi scanner*/
System.out.println("========Aplikasi
Pembuat Garis========"); /*<----|*/
System.out.println("1. Membuat Garis
Vertical"); /*<-----------------|*/
System.out.println("2. Membuat Garis
Horizontal"); /*<--membuat
teks untuk menu pilihan*/
System.out.println("3. Membuat Garis
Diagonal"); /*<-----------------|*/
System.out.print("Silahkan Masukan
Pilihan yang diinginkan : ");/*<--|*/
pil = input.nextInt(); /*Menerima inputan user dan
memasukannya kedalam variabel 'pil'*/
switch(pil){ /*memilih kondisi pada 'case' berdasarkan
inputan user (misal : 1 untuk case 1)*/
case 1:
Vertikal vet = new Vertikal(); /*memanggil class 'Vertikal'*/
vet.layar(); /*menjalankan fungsi 'layar' pada
class 'Vertikal'*/
break; /*memberhentikan kondisi*/
case 2:
Horizontal hoz = new Horizontal();
/*memanggil class
'Horizontal'*/
hoz.layar(); /*menjalankan fungsi 'layar' pada
class 'Horizontal'*/
break;
case 3:
Diagonal dig = new Diagonal(); /*memanggil class 'Diagonal*/
dig.layar(); /*menjalankan fungsi 'layar' pada class 'Diagonal*/
break;
default:
System.out.println("Pilihan
yang anda pilih salah!!"); /*memunculkan
pesan apabila input pada pil tidak sesuai dengan case yang ada*/
}
}
}
2. Vertikal.java
import
org.lwjgl.LWJGLException; /*memanggil
library untuk menjalankan fungsi pengecualian pada lwjgl*/
import
org.lwjgl.opengl.*; /*memanggil
library 'lwjgl' untuk menjalankan renderer opengl*/
import
java.util.*; /*memanggil
library untuk fungsi scanner yang berguna untuk inputan*/
public
class Vertikal {
public void layar() throws LWJGLException {
int a,kordin1,kordin2; /*mendefinisikan variabel
'a,kordin1,dan kordin2'*/
Scanner putin = new Scanner(System.in);
/*mendefinisikan fungsi
Scanner pada 'putin' untuk menerima input user*/
System.out.print("Masukan titik
awal (x) : ");
kordin1 = putin.nextInt(); /*input koordinat x*/
System.out.print("Masukan titik
awal (y) : ");
kordin2 = putin.nextInt(); /*input koordinat y*/
System.out.print("Masukan Panjang
garis yang diinginkan (dalam Pixel) : ");
a = putin.nextInt(); /*menerima input user dan
memasukannya kedalam variabel 'a' yang akan digunakan sebagai panjang dari
garis yang akan dibuat*/
try {
Display.setDisplayMode(new DisplayMode(300,300)); /*membuat sebuah jendela rendering
dengan setting luas layar = 300x300*/
Display.setTitle("Garis
Vertikal"); /*mengubah
nama jendela rendering menjadi "Garis Vertikal"*/
Display.create(); /*membuat
jendela rendering*/
} catch (LWJGLException e) {
System.exit(0); /*mencegah
jendela rendering tertutup apabila tidak ada aktivitas pada library LWJGL*/
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity(); /*memanggil opengl sebagai renderer (bagian ini gak
yakin sih -_-)*/
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) { /*mencegah jendela renderer
tertutup kecuali ditutup sendiri oleh user*/
GL11.glBegin(GL11.GL_QUADS); /*memanggil fungsi 'GL_QUADS untuk
merender berdasarkan 4 titik yang ditentukan*/
GL11.glVertex2f(kordin1,kordin2); /*titik awal*/
GL11.glVertex2f(kordin1+5,kordin2);
/*titik awal, pada sumbu x
sengaja diberi jeda agar mempertebal garis yang akan dibentuk*/
GL11.glVertex2f(kordin1+5,kordin2+a);
/*titik akhir, pada sumbu x
sengaja diberi jeda agar mempertebal garis yang akan dibentuk*/
GL11.glVertex2f(kordin1,kordin2+a);
/*titik akhir, pada sumbu y
variabel akan ditambahkan 'a' yang sesuai dengan inputan user*/
GL11.glEnd(); /*mengakhiri proses
render*/
Display.update();
}
}
}
3. Horizontal.java
import
org.lwjgl.LWJGLException; /*memanggil
library untuk menjalankan fungsi pengecualian pada lwjgl*/
import
org.lwjgl.opengl.*; /*memanggil
library 'lwjgl' untuk menjalankan renderer opengl*/
import
java.util.*; /*memanggil
library untuk fungsi scanner yang berguna untuk inputan*/
public
class Vertikal {
public void layar() throws LWJGLException {
int a,kordin1,kordin2; /*mendefinisikan variabel
'a,kordin1,dan kordin2'*/
Scanner putin = new Scanner(System.in);
/*mendefinisikan fungsi
Scanner pada 'putin' untuk menerima input user*/
System.out.print("Masukan titik
awal (x) : ");
kordin1 = putin.nextInt(); /*input koordinat x*/
System.out.print("Masukan titik
awal (y) : ");
kordin2 = putin.nextInt(); /*input koordinat y*/
System.out.print("Masukan Panjang
garis yang diinginkan (dalam Pixel) : ");
a = putin.nextInt(); /*menerima input user dan
memasukannya kedalam variabel 'a' yang akan digunakan sebagai panjang dari
garis yang akan dibuat*/
try {
Display.setDisplayMode(new DisplayMode(300,300)); /*membuat sebuah jendela rendering
dengan setting luas layar = 300x300*/
Display.setTitle("Garis
Vertikal"); /*mengubah
nama jendela rendering menjadi "Garis Vertikal"*/
Display.create(); /*membuat
jendela rendering*/
} catch (LWJGLException e) {
System.exit(0); /*mencegah
jendela rendering tertutup apabila tidak ada aktivitas pada library LWJGL*/
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity(); /*memanggil opengl sebagai renderer (bagian ini gak
yakin sih -_-)*/
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) { /*mencegah jendela renderer
tertutup kecuali ditutup sendiri oleh user*/
GL11.glVertex2f(kordin1,kordin2); /*titik
awal*/
GL11.glVertex2f(kordin1+5,kordin2); /*titik awal, pada sumbu x sengaja diberi jeda agar
mempertebal garis yang akan dibentuk*/
GL11.glVertex2f(kordin1+5,kordin2+a); /*titik akhir, pada sumbu x sengaja diberi jeda agar
mempertebal garis yang akan dibentuk*/
GL11.glVertex2f(kordin1,kordin2+a); /*titik akhir, pada sumbu y variabel akan ditambahkan 'a'
yang sesuai dengan inputan user*/
GL11.glEnd(); /*mengakhiri proses render*/
Display.update();
}
}
}
4. Diagonal.java
import
org.lwjgl.LWJGLException; /*memanggil
library untuk menjalankan fungsi pengecualian pada lwjgl*/
import
org.lwjgl.opengl.*; /*memanggil
library 'lwjgl' untuk menjalankan renderer opengl*/
import
java.util.*; /*memanggil
library untuk fungsi scanner yang berguna untuk inputan*/
public
class Vertikal {
public void layar() throws LWJGLException {
int a,kordin1,kordin2; /*mendefinisikan variabel
'a,kordin1,dan kordin2'*/
Scanner putin = new Scanner(System.in);
/*mendefinisikan fungsi
Scanner pada 'putin' untuk menerima input user*/
System.out.print("Masukan titik
awal (x) : ");
kordin1 = putin.nextInt(); /*input koordinat x*/
System.out.print("Masukan titik
awal (y) : ");
kordin2 = putin.nextInt(); /*input koordinat y*/
System.out.print("Masukan Panjang
garis yang diinginkan (dalam Pixel) : ");
a = putin.nextInt(); /*menerima input user dan
memasukannya kedalam variabel 'a' yang akan digunakan sebagai panjang dari
garis yang akan dibuat*/
try {
Display.setDisplayMode(new DisplayMode(300,300)); /*membuat sebuah jendela rendering
dengan setting luas layar = 300x300*/
Display.setTitle("Garis
Vertikal"); /*mengubah
nama jendela rendering menjadi "Garis Vertikal"*/
Display.create(); /*membuat
jendela rendering*/
} catch (LWJGLException e) {
System.exit(0); /*mencegah
jendela rendering tertutup apabila tidak ada aktivitas pada library LWJGL*/
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity(); /*memanggil opengl sebagai renderer (bagian ini gak
yakin sih -_-)*/
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
while (!Display.isCloseRequested()) { /*mencegah jendela renderer
tertutup kecuali ditutup sendiri oleh user*/
GL11.glVertex2f(kordin1,kordin2); /*titik
awal*/
GL11.glVertex2f(kordin1-5,kordin2); /*titik awal, pada sumbu x sengaja diberi jeda untuk
mempertebal garis*/
GL11.glVertex2f(kordin1+a-5,kordin2+a); /*titik akhir, pada sumbu x dan y variabel akan
ditambahkan 'a' yang sesuai dengan inputan user dan pada sumbu x sengaja diberi
jeda untuk mempertebal garis*/
GL11.glVertex2f(kordin1+a,kordin2+a); /*titik akhir, pada sumbu x dan y variabel akan
ditambahkan 'a' yang sesuai dengan inputan user*/
GL11.glEnd();
/*mengakhiri proses render*/
Display.update();
}
}
}
Tidak ada komentar:
Posting Komentar