Minggu, 08 Januari 2017

Membuat Bentuk 3D dengan Menggunakan Basic4GL "MEJA BATU"

'variabel untuk posisi kamera
Dim pcamx# = 0
Dim pcamy# = 0
Dim pcamz# = 4

'variabel untuk posisi titik pandang
Dim prefx# = 0
Dim prefy# = 0
Dim prefz# = 0

'variabel perpindahan
Dim pindah# = 0.01

'variabel tekstur
Dim teksturkayu

teksturkayu = loadmipmaptexture("images.jpg")

glEnable(GL_TEXTURE_2D)

while true
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
glLoadIdentity()

gluLookAt(pcamx#, pcamy#, pcamz#, prefx#, prefy#, prefz#, 0, 1, 0)

glBindTexture(GL_TEXTURE_2D, teksturkayu)

glBegin (GL_QUADS) 'sisi belakang  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 2.0, -1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -2.0, -1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -2.0, -1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 2.0, -1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi depan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 2.0, 1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -2.0, 1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -2.0, 1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 2.0, 1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi kiri  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 2.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(-1.0, 2.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(-1.0, -2.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -2.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi kanan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(1.0, 2.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 2.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -2.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(1.0, -2.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi bawah  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -2.0, 1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, -2.0, -1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, -2.0, -1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -2.0, 1.0)
glEnd()

                     
           
'kubus atas'          

glBegin (GL_QUADS) 'sisi belakang  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, -1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, -1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi depan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, 1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, 1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi kiri  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(-1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(-1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi kanan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(1.0, -1.0, -1.0)
glEnd()

 

glBegin (GL_QUADS) 'sisi bawah1  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(2.0, 2.0, 2.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(2.0, 2.0, -2.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-2.0, 2.0, -2.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-2.0, 2.0, 2.0)
glEnd()

glBegin (GL_QUADS) 'sisi depan1
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(2.0, 2.0, 2.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(-2.0, 2.0, 2.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-2.0, 1.0, 2.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(2.0, 1.0, 2.0) 'kiri atas
glEnd()
                                 
 glBegin (GL_QUADS) 'sisi belakang1
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(2.0, 2.0, -2.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(-2.0, 2.0, -2.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-2.0, 1.0, -2.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(2.0, 1.0, -2.0) 'kiri atas
glEnd()

   glBegin (GL_QUADS) 'sisi kiri1  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(-2.0, 2.0, 2.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(-2.0, 2.0, -2.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(-2.0, 1.0, -2.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-2.0, 1.0, 2.0)
glEnd()                            

 glBegin (GL_QUADS) 'sisi kanan1  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(2.0, 2.0, 2.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(2.0, 2.0, -2.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(2.0, 1.0, -2.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(2.0, 1.0, 2.0)
glEnd()
 

glBegin (GL_QUADS) 'sisi bawah  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(2.0, 1.0, 2.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(2.0, 1.0, -2.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-2.0, 1.0, -2.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-2.0, 1.0, 2.0)
glEnd()


 glBegin (GL_QUADS) 'sisi belakang  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, -1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, -1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi depan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0) 'kanan atas
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0) 'kanan bawah
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, 1.0) 'kiri bawah
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, 1.0) 'kiri atas
glEnd()

glBegin (GL_QUADS) 'sisi kiri  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(-1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(-1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(-1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(-1.0, -1.0, -1.0)
glEnd()

glBegin (GL_QUADS) 'sisi kanan  
    'glColor3f(1.0, 0.0, 0.0)
    glTexCoord2f(0,1)
    glVertex3f(1.0, 1.0, -1.0)
   
    'glColor3f(0.0, 1.0, 0.0)
    glTexCoord2f(1,1)
    glVertex3f(1.0, 1.0, 1.0)
   
    'glColor3f(0.0, 0.0, 1.0)
    glTexCoord2f(1,0)
    glVertex3f(1.0, -1.0, 1.0)
   
    'glColor3f(1.0, 0.0, 1.0)
    glTexCoord2f(0,0)
    glVertex3f(1.0, -1.0, -1.0)
glEnd()



swapBuffers()

if scankeydown(VK_RIGHT) then    ' gerak ke kanan
pcamx# = pcamx# + pindah#
elseif scankeydown(VK_LEFT) then  ' gerak ke kiri
pcamx# = pcamx# - pindah#
elseif scankeydown(VK_UP) then  ' gerak ke atas
pcamy# = pcamy# + pindah#
elseif scankeydown(VK_DOWN) then  ' gerak ke bawah
pcamy# = pcamy# - pindah#
endif    

wend        

Hasil program :


Minggu, 30 Oktober 2016

CODING LINGKARAN

LANGKAH - LANGKAH MENGHITUNG ALGORITMA LINGKARAN

1.Tentukan titik tengah dan jari-jari
   xc , yc , R

2. Tentukan nilai pengubahan posisi
    P = I - R;
    x = 0;
    y = R = 4

3. Perulangan
    xc = y
    P Selanjutnya = P + (2 * x) + 1 jika P < 0
    P Selanjutnya = P + (2 * (x - y)) + 1

4. Translasi dan Pencerminan
    (xc + x ,yc + y )
    (xc - x ,yc + y )
    (xc + x ,yc - y )
    (xc - x ,yc - y )
    (xc + y ,yc + x )
    (xc - y ,yc + x )
    (xc + y ,yc - x )
    (xc - y ,yc - x )


CONTOH CODING LINGKARAN:

MAIN.JAVA

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package lingkaran;

import java.awt.*;
import javax.swing.*;

/**
 *
 * @author DRIANTAMA
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("algoritma pembuat lingkaran");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(720,480);
        frame.setVisible(true);

        gambar gbr = new gambar();
        gbr.setxc(350);
        gbr.setyc(200);
        gbr.setr(150);
        frame.add(gbr);
    }

}


GARIS.JAVA

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package lingkaran;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
 *
 * @author YOPPY
 */
public class gambar extends JPanel {
    private int xc,yc,r;

    public int getxc() {
        return xc;
    }

    public int getyc() {
        return yc;
    }

    public int getr() {
        return r;
    }

    public void setxc(int xa) {
        xc = xa;
    }

    public void setyc(int ya) {
        yc = ya;
    }

    
    public void setr(int jari2) {
        r = jari2;
    }

    public void paint(Graphics g) {     
        int p =  1-r;
        int x = 0;
        int y = r;

        super.paint(g);
        this.setBackground(Color.RED);
        
        g.setColor(Color.cyan);

        while(x<=y) {
            x++;
            if (p<0) {
               p+=2*x+1;
            } else {
                y--;
                p+=2*(x-y)+1;
            }
            
            g.drawRect(xc+x, yc+y, 1, 1);
            g.drawRect(xc-x, yc+y, 1, 1);
            g.drawRect(xc+x, yc-y, 1, 1);
            g.drawRect(xc-x, yc-y, 1, 1);
            g.drawRect(xc+y, yc+x, 1, 1);
            g.drawRect(xc-y, yc+x, 1, 1);
            g.drawRect(xc+y, yc-x, 1, 1);
            g.drawRect(xc-y, yc-x, 1, 1);
        }
        
    }
}



CODING BRESENHAM

LANGKAH - LANGKAH MENGHITUNG ALGORITMA BRESENHAM:

1. Tentukan Titik Awal dan Akhir ;
    Titik Awal  (x1 , y1)
    Titik Akhir (x2 , y2)

2. Nilai Pengubahan posisi (P)
    P Awal = (2 * Dy) - Dx
    a. Kondisi 1 : Jika P< 0, Maka x = x + 1,Y tetap P selanjutnya adalah P = P + (2 * Dy)
    b. Kondisi 2 : Jika  P> 0 Maka x = x + 1,Y = Y + 1 P selanjutnya adalah P = P + 2* (Dy - Dx)

CONTOH CODING BRESENHAM:

MAIN.JAVA 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bresenham;
import java.awt.*;
import javax.swing.*;
/**
 *
 * @author DRIANTAMA
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public Main() {
        
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("algoritma garis bresenham");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        garis grs = new garis();
        
        grs.setx0(60);
        grs.sety0(40);
        grs.setx1(600);
        grs.sety1(400);
        grs.setBackground(Color.WHITE);
        
        frame.add(grs);
        frame.setSize(720,480);
        frame.setVisible(true);
        
    }

}


GARIS.JAVA

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bresenham;
import java.awt.*;
import javax.swing.*;
/**
 *
 * @author YOPPY
 */
public class garis extends JPanel{
    private int x0,y0,x1,y1;
    
    public int getx0() {
        return x0;
    }
    
    public int getx1() {
        return x1;
    }
    
    public int gety0() {
        return y0;
    }
    
    public int gety1() {
        return y1;
    }
    
    public void setx0(int xa) {
        x0 = xa;
    }
    
    public void sety0(int ya) {
        y0 = ya;
    }
    
    public void setx1(int xb) {
        x1 = xb;
    }
    
    public void sety1(int yb) {
        y1 = yb;
    }
    
    public void paint(Graphics g) {
        int x,y,xend;
        int dx = Math.abs(x1-x0);
        int dy = Math.abs(y1-y0);
        int p = 2*dy-dx;
        int duady = 2*dy;
        int duadydx = 2*(dy-dx);
        if (x0>x1) {
            x = x1;
            y = y1;
            xend = x0;
        } else {
            x = x0;
            y = y0;
            xend = x1;
        }
        
       
        g.drawRect(x, y, 1, 1);
        while(x<xend) {
            x++;
            if(p<0) {
                p+=duady;
            } else {
                if (y0>y1) {
                    y--; } else y++;
                p+=duadydx;
            }
            g.drawRect(x, y, 1, 1);
        }
    }
    
    public garis() {
        
    }
        
}






CODING DDA

LANGKAH - LANGKAH MENGHITUNG ALGORITMA DDA:

1. Tentukan Titik Awal dan Akhir
    Titik Awal    (x1,y1)  
    Titik Akhir   (x2,y2)

2. Pengubahan Posisi (steps)
    Jika Dx > DY maka steps  = DX
    Jika tidak maka steps  = DY
    Dx = X2 - X1
    Dy = Y2 - Y1
    Perubahan nilai X (X_inc) = Dx/steps =
    Perubahan nilai Y (Y_inc) = Dy/steps =

3. Perulangan (ubah posisi dan gambar)
    X = X + X_inc 
    Y = Y + Y_inc

CONTOH CODING DDA:

MAIN.JAVA

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dda;

import java.awt.*;
import javax.swing.*;
/**
 *
 * @author DRIANTAMA
 */
public class Main {
    
    /**
     * @param args the command line arguments
     */
    
    public Main() {
    }
    
    public static void main(String[] args) {
        // TODO code application logic here
                     
        JFrame frame = new JFrame("algoritma garis dda");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        garis grs = new garis();
        grs.setx1(60);
        grs.sety1(40);
        grs.setx2(600);
        grs.sety2(400);
        grs.setBackground(Color.WHITE);
        frame.add(grs);
        frame.setSize(720,480);
        frame.setVisible(true);
    }
}


GARIS.JAVA

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dda;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
 *
 * @author DRIANTAMA
 */
public class garis extends JPanel {
    private int x1;
    private int y1;
    private int x2;
    private int y2;
    
   
    
    public int getx1() {
        return x1;
    }
    
    public int getx2() {
        return x2;
    }
    
    public int gety1() {
        return y1;
    }
    
    public int gety2() {
        return y2;
    }
    
    public void setx1(int xa) {
        x1 = xa; //diibaratkan
    }
    
    public void setx2(int xb) {
        x2 = xb;
    }
    
    public void sety1(int ya) {
        y1 = ya;
    }
    
    public void sety2(int yb) {
        y2 = yb;
    }
    
       
    public void paint(Graphics g) {
        int dx = x2-x1; //rumus
        int dy = y2-y1; //rumus
        int steps,k; 

        float x=x1;
        float y=y1;
        float x_inc,y_inc;
        

        super.paint(g);
        this.setBackground(Color.CYAN); //warna background
        g.setColor(Color.BLACK); //warna garis

        if(Math.abs(dx)>Math.abs(dy)) steps = Math.abs(dx);
        else steps = Math.abs(dy);

        x_inc = dx/(float)steps;
        y_inc = dy/(float)steps;

        g.drawRect(Math.round(x), Math.round(y), 1, 1);
        for(k=0;k<steps;k++) {
            x+=x_inc;
            y+=y_inc;
            g.drawRect(Math.round(x), Math.round(y), 1, 1);
        }

      
        
    }
    
    public garis() {
    
    }
}