Senin, 26 Oktober 2015

Lanjutan Tugas Grafik Komp & Pengolahan Citra





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