'posisi mata
Dim pmatax# = 0
Dim pmatay# = 0
Dim pmataz# = 4
'posisi titik pandang
Dim ppandangx# = 0
Dim ppandangy# = 0
Dim ppandangz# = -4
Dim kecepatan# = 0.01
'variabel untuk menyimpan gambar tekstur
Dim tekstur
tekstur = loadmipmaptexture("gbr/udinus.jpg")
Dim tekstur2
tekstur2 = loadmipmaptexture("gbr/kayu.jpg")
Dim tekstur3
tekstur3 = loadmipmaptexture("gbr/dinding.jpg")
Dim tekstur4
tekstur4 = loadmipmaptexture("gbr/bunga.jpg")
Dim tekstur5
tekstur5 = loadmipmaptexture("gbr/blue.jpg")
'beritahu bahwa akan menggunakan tekstur
glEnable(gl_texture_2d)
while true
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
gluLookAt(pmatax#, pmatay#, pmataz#, ppandangx#, ppandangy#, ppandangz#, 0,1,0) 'posisi mata, posisi titik pandang, vektor up (0,1,0)
glBindTexture(gl_texture_2d, tekstur3)
glBegin(GL_QUADS) 'sisi depan
'glColor3f(1,0,0) 'warna merah
glTexCoord2d(1,1)
glVertex3f(1, 1, -1) 'kanan atas
'glColor3f(0,1,0) 'warna hijau
glTexCoord2d(0,1)
glVertex3f(-1, 1, -1) 'kiri atas
'glColor3f(0,0,1) 'warna biru
glTexCoord2d(0,0)
glVertex3f(-1, -1, -1) 'kiri bawah
'glColor3f(1,1,0) 'warna kuning
glTexCoord2d(1,0)
glVertex3f(1, -1, -1)'kanan bawah
glEnd()
glBindTexture(gl_texture_2d, tekstur)
glBegin(GL_QUADS) 'sisi belakang
'glColor3f(0,1,0) 'warna hijau
glTexCoord2d(1,1)
glVertex3f(1, 1, 1) 'kanan atas
'glColor3f(1,0,0) 'warna merah
glTexCoord2d(0,1)
glVertex3f(-1, 1, 1) 'kiri atas
'glColor3f(0,0,1) 'warna biru
glTexCoord2d(0,0)
glVertex3f(-1, -1, 1) 'kiri bawah
'glColor3f(1,1,0) 'warna kuning
glTexCoord2d(1,0)
glVertex3f(1, -1, 1)'kanan bawah
glEnd()
glBindTexture(gl_texture_2d, tekstur2)
glBegin(GL_QUADS) 'sisi atas
'glColor3f(0,1,0) 'warna hijau
glTexCoord2d(0,1)
glVertex3f(1, 1, -1) 'kanan depan
'glColor3f(1,0,0) 'warna merah
glTexCoord2d(0,0)
glVertex3f(1, 1, 1) 'kanan belakang
'glColor3f(0,0,1) 'warna biru
glTexCoord2d(1,0)
glVertex3f(-1, 1, 1) 'kiri belakang
'glColor3f(1,1,0) 'warna kuning
glTexCoord2d(1,1)
glVertex3f(-1, 1, -1)'kiri depan
glEnd()
glBindTexture(gl_texture_2d, tekstur4)
glBegin(GL_QUADS) 'sisi bawah
'glColor3f(0,1,0) 'warna hijau
glTexCoord2d(0,1)
glVertex3f(1, -1, -1) 'kanan depan
'glColor3f(1,0,0) 'warna merah
glTexCoord2d(0,0)
glVertex3f(1, -1, 1) 'kanan belakang
'glColor3f(0,0,1) 'warna biru
glTexCoord2d(1,0)
glVertex3f(-1, -1, 1) 'kiri belakang
'glColor3f(1,1,0) 'warna kuning
glTexCoord2d(1,1)
glVertex3f(-1, -1, -1)'kiri depan
glEnd()
glBindTexture(gl_texture_2d, tekstur5)
glBegin(GL_QUADS) 'sisi kanan
'glColor3f(0,1,0) 'warna hijau
glTexCoord2d(1,0)
glVertex3f(1, 1, -1) 'atas depan
'glColor3f(1,0,0) 'warna merah
glTexCoord2d(0,0)
glVertex3f(1, 1, 1) 'atas belakang
'glColor3f(0,0,1) 'warna biru
glTexCoord2d(0,1)
glVertex3f(1, -1, 1) 'bawah belakang
'glColor3f(1,1,0) 'warna kuning
glTexCoord2d(1,1)
glVertex3f(1, -1, -1)'bawah depan
glEnd()
swapBuffers()
if scankeydown(VK_RIGHT) then
pmatax# = pmatax# + kecepatan#
' ppandangx# = ppandangx# + kecepatan#
elseif scankeydown(VK_LEFT) then
pmatax# = pmatax# - kecepatan#
' ppandangx# = ppandangx# - kecepatan#
endif
if scankeydown (VK_UP) then
pmatay# = pmatay# + kecepatan#
' ppandangx# = ppandangy# + kecepatan#
elseif scankeydown (VK_DOWN) then
pmatay# = pmatay# - kecepatan#
' ppandangx# = ppandangy# - kecepatan#
endif
wend
Pembuatan Garis DDA, Brassenham, dan Lingkaran menggunakan Java source
Kamis, 04 Januari 2018
Rabu, 01 November 2017
Pembuatan Garis DDA, Brassenham, dan Lingkaran menggunakan Java source
A. Garis DDA
package metodedda;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
class garis implements ActionListener{
//frame utama
JFrame f= new JFrame("Garis DDA");
//panel
Kanvas k=new Kanvas();
//label
JLabel lx1=new JLabel("x1");
JLabel ly1=new JLabel("y1");
JLabel lx2=new JLabel("x2");
JLabel ly2=new JLabel("y2");
//form inputan
JTextField tx1=new JTextField("0");
JTextField ty1=new JTextField("0");
JTextField tx2=new JTextField("0");
JTextField ty2=new JTextField("0");
//buton
JButton dda=new JButton("DDA");
int x1,x2,y1,y2,tmp,dy=0,dx=0,p,r,x,y,tmp1,pusatx,pusaty;
float a,b,xinc,yinc,dy1,dx1,step;
public garis(){
f.setLocation(500,300);
f.setSize(500,455);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.add(k);
k.setBounds(0,0,500,360);
pusatx=k.getWidth()-(k.getWidth()/2);
pusaty=k.getHeight()-(k.getHeight()/2);
//Label
f.add(lx1); lx1.setBounds(30,365,30,20);
f.add(ly1); ly1.setBounds(80,365,30,20);
f.add(lx2); lx2.setBounds(130,365,30,20);
f.add(ly2); ly2.setBounds(180,365,30,20);
//Textfield
f.add(tx1); tx1.setBounds(20,390,40,20);
f.add(ty1); ty1.setBounds(70,390,40,20);
f.add(tx2); tx2.setBounds(120,390,40,20);
f.add(ty2); ty2.setBounds(170,390,40,20);
//Button
f.add(dda); dda.setBounds(220,370,150,40);
dda.addActionListener(this);
tx1.setHorizontalAlignment(tx1.CENTER);
ty1.setHorizontalAlignment(ty1.CENTER);
tx2.setHorizontalAlignment(tx2.CENTER);
ty2.setHorizontalAlignment(ty2.CENTER);
f.show();
}
public void actionPerformed(ActionEvent e){
Object objek=e.getSource();
if(objek==dda){
k.repaint();
}
}
private class Kanvas extends Canvas{
Kanvas(){
setBackground(Color.BLACK);
}
public void paint(Graphics g){
g.setColor(Color.YELLOW);
g.drawLine(0,pusaty,k.getWidth(),pusaty);
g.drawLine(pusatx,0,pusatx,k.getWidth());
garisDDA(g);
}
}
public void garisDDA(Graphics g)
{
//input
x1=pusatx+Integer.parseInt(tx1.getText());
y1=pusaty-Integer.parseInt(ty1.getText());
//default
//x1= 50;
//y1= 50;
x2=pusatx+Integer.parseInt(tx2.getText());
y2=pusaty-Integer.parseInt(ty2.getText());
if(x1>x2)
{
tmp=x1;
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
}
a=(float)(x1);
b=(float)(y1);
dx=(x2-x1);
dy=(y2-y1);
if(dx>dy)
step=dx;
else
step=dy;
xinc=dx/step;
yinc=dy/step;
do
{
x=Math.round(a);
y=Math.round(b);
g.fillRect(x, y, 1, 1);
a=a+xinc;
b=b+yinc;
}
while(x!=x2&&y!=y2);
}
}
public class garis_DDA {
public static void main (String[] args) {
new garis();
}
}
B. Brassenham
package metodedda;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
class garisB implements ActionListener {
JFrame f = new JFrame("Garis Bresenham");
Kanvas k = new Kanvas();
JLabel lx1 = new JLabel("x1");
JLabel ly1 = new JLabel("y1");
JLabel lx2 = new JLabel("x2");
JLabel ly2 = new JLabel("y2");
JTextField tx1 = new JTextField("0");
JTextField ty1 = new JTextField("0");
JTextField tx2 = new JTextField("0");
JTextField ty2 = new JTextField("0");
JButton bres = new JButton("BRESENHAM");
int x1, x2, y1, y2, p, pusatx, pusaty, tmp, dx, dy;
public garisB() {
f.setLocation(300, 100);
f.setSize(500, 455);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.add(k);
k.setBounds(0, 0, 500, 360);
pusatx = k.getWidth() - (k.getWidth() / 2);
pusaty = k.getHeight() - (k.getHeight() / 2);
//Label
f.add(lx1);
lx1.setBounds(30, 365, 30, 20);
f.add(ly1);
ly1.setBounds(80, 365, 30, 20);
f.add(lx2);
lx2.setBounds(130, 365, 30, 20);
f.add(ly2);
ly2.setBounds(180, 365, 30, 20);
//Textfield
f.add(tx1);
tx1.setBounds(20, 390, 40, 20);
f.add(ty1);
ty1.setBounds(70, 390, 40, 20);
f.add(tx2);
tx2.setBounds(120, 390, 40, 20);
f.add(ty2);
ty2.setBounds(170, 390, 40, 20);
//Button
f.add(bres);
bres.setBounds(220, 370, 150, 40);
bres.addActionListener(this);
tx1.setHorizontalAlignment(tx1.CENTER);
ty1.setHorizontalAlignment(ty1.CENTER);
tx2.setHorizontalAlignment(tx2.CENTER);
ty2.setHorizontalAlignment(ty2.CENTER);
f.show();
}
public void actionPerformed(ActionEvent e) {
Object objek = e.getSource();
if (objek == bres) {
k.repaint();
}
}
class Kanvas extends Canvas {
Kanvas() {
setBackground(Color.BLACK);
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.drawLine(0, pusaty, k.getWidth(), pusaty);
g.drawLine(pusatx, 0, pusatx, k.getWidth());
bresenham(g);
}
}
public void bresenham(Graphics g) {
//INPUT
x1 = pusatx + Integer.parseInt(tx1.getText());
y1 = pusaty - Integer.parseInt(ty1.getText());
//default
//x1 = 50;
//y1 = 50;
x2 = pusatx + Integer.parseInt(tx2.getText());
y2 = pusaty - Integer.parseInt(ty2.getText());
if (x1 > x2) {
tmp = x1;
x1 = x2;
x2 = tmp;
tmp = y1;
y1 = y2;
y2 = tmp;
}
dx = x2 - x1;
dy = y2 - y1;
p = (2 * dy) - dx;
if (p != 0) {
do {
if ((y2 < y1 && x2 < x1) || (x2 > x1 && y2 > y1)) {
if (p < 0) {
if (dx > dy) {
x1 = x1 + 1;
p = p + (2 * dy);
} else {
y1 = y1 + 1;
p = p + (2 * dx);
}
} else {
x1 = x1 + 1;
y1 = y1 + 1;
if (dx > dy) {
p = p + ((2 * dy) - (2 * dx));
} else {
p = p + (2 * dx - 2 * dy);
}
}
} else {
if (p > 0) {
if (dx < dy) {
x1 = x1 + 1;
p = p - (2 * dy);
} else {
y1 = y1 - 1;
p = p - (2 * dx);
}
} else {
x1 = x1 + 1;
y1 = y1 - 1;
if (dx < (dy * (-1))) {
p = p - ((2 * dy) + (2 * dx)); //bener
} else {
p = p - ((2 * dx) + (2 * dy * (-1)));
}
}
}
g.fillRect(x1, y1, 1, 1);
} while ((x1 != x2) && (y1 != y2));
}
}
}
public class Brassenham {
public static void main(String[] args) {
new garisB();
}
}
package metodedda;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
class garis implements ActionListener{
//frame utama
JFrame f= new JFrame("Garis DDA");
//panel
Kanvas k=new Kanvas();
//label
JLabel lx1=new JLabel("x1");
JLabel ly1=new JLabel("y1");
JLabel lx2=new JLabel("x2");
JLabel ly2=new JLabel("y2");
//form inputan
JTextField tx1=new JTextField("0");
JTextField ty1=new JTextField("0");
JTextField tx2=new JTextField("0");
JTextField ty2=new JTextField("0");
//buton
JButton dda=new JButton("DDA");
int x1,x2,y1,y2,tmp,dy=0,dx=0,p,r,x,y,tmp1,pusatx,pusaty;
float a,b,xinc,yinc,dy1,dx1,step;
public garis(){
f.setLocation(500,300);
f.setSize(500,455);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.add(k);
k.setBounds(0,0,500,360);
pusatx=k.getWidth()-(k.getWidth()/2);
pusaty=k.getHeight()-(k.getHeight()/2);
//Label
f.add(lx1); lx1.setBounds(30,365,30,20);
f.add(ly1); ly1.setBounds(80,365,30,20);
f.add(lx2); lx2.setBounds(130,365,30,20);
f.add(ly2); ly2.setBounds(180,365,30,20);
//Textfield
f.add(tx1); tx1.setBounds(20,390,40,20);
f.add(ty1); ty1.setBounds(70,390,40,20);
f.add(tx2); tx2.setBounds(120,390,40,20);
f.add(ty2); ty2.setBounds(170,390,40,20);
//Button
f.add(dda); dda.setBounds(220,370,150,40);
dda.addActionListener(this);
tx1.setHorizontalAlignment(tx1.CENTER);
ty1.setHorizontalAlignment(ty1.CENTER);
tx2.setHorizontalAlignment(tx2.CENTER);
ty2.setHorizontalAlignment(ty2.CENTER);
f.show();
}
public void actionPerformed(ActionEvent e){
Object objek=e.getSource();
if(objek==dda){
k.repaint();
}
}
private class Kanvas extends Canvas{
Kanvas(){
setBackground(Color.BLACK);
}
public void paint(Graphics g){
g.setColor(Color.YELLOW);
g.drawLine(0,pusaty,k.getWidth(),pusaty);
g.drawLine(pusatx,0,pusatx,k.getWidth());
garisDDA(g);
}
}
public void garisDDA(Graphics g)
{
//input
x1=pusatx+Integer.parseInt(tx1.getText());
y1=pusaty-Integer.parseInt(ty1.getText());
//default
//x1= 50;
//y1= 50;
x2=pusatx+Integer.parseInt(tx2.getText());
y2=pusaty-Integer.parseInt(ty2.getText());
if(x1>x2)
{
tmp=x1;
x1=x2;
x2=tmp;
tmp=y1;
y1=y2;
y2=tmp;
}
a=(float)(x1);
b=(float)(y1);
dx=(x2-x1);
dy=(y2-y1);
if(dx>dy)
step=dx;
else
step=dy;
xinc=dx/step;
yinc=dy/step;
do
{
x=Math.round(a);
y=Math.round(b);
g.fillRect(x, y, 1, 1);
a=a+xinc;
b=b+yinc;
}
while(x!=x2&&y!=y2);
}
}
public class garis_DDA {
public static void main (String[] args) {
new garis();
}
}
B. Brassenham
package metodedda;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
class garisB implements ActionListener {
JFrame f = new JFrame("Garis Bresenham");
Kanvas k = new Kanvas();
JLabel lx1 = new JLabel("x1");
JLabel ly1 = new JLabel("y1");
JLabel lx2 = new JLabel("x2");
JLabel ly2 = new JLabel("y2");
JTextField tx1 = new JTextField("0");
JTextField ty1 = new JTextField("0");
JTextField tx2 = new JTextField("0");
JTextField ty2 = new JTextField("0");
JButton bres = new JButton("BRESENHAM");
int x1, x2, y1, y2, p, pusatx, pusaty, tmp, dx, dy;
public garisB() {
f.setLocation(300, 100);
f.setSize(500, 455);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.add(k);
k.setBounds(0, 0, 500, 360);
pusatx = k.getWidth() - (k.getWidth() / 2);
pusaty = k.getHeight() - (k.getHeight() / 2);
//Label
f.add(lx1);
lx1.setBounds(30, 365, 30, 20);
f.add(ly1);
ly1.setBounds(80, 365, 30, 20);
f.add(lx2);
lx2.setBounds(130, 365, 30, 20);
f.add(ly2);
ly2.setBounds(180, 365, 30, 20);
//Textfield
f.add(tx1);
tx1.setBounds(20, 390, 40, 20);
f.add(ty1);
ty1.setBounds(70, 390, 40, 20);
f.add(tx2);
tx2.setBounds(120, 390, 40, 20);
f.add(ty2);
ty2.setBounds(170, 390, 40, 20);
//Button
f.add(bres);
bres.setBounds(220, 370, 150, 40);
bres.addActionListener(this);
tx1.setHorizontalAlignment(tx1.CENTER);
ty1.setHorizontalAlignment(ty1.CENTER);
tx2.setHorizontalAlignment(tx2.CENTER);
ty2.setHorizontalAlignment(ty2.CENTER);
f.show();
}
public void actionPerformed(ActionEvent e) {
Object objek = e.getSource();
if (objek == bres) {
k.repaint();
}
}
class Kanvas extends Canvas {
Kanvas() {
setBackground(Color.BLACK);
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.drawLine(0, pusaty, k.getWidth(), pusaty);
g.drawLine(pusatx, 0, pusatx, k.getWidth());
bresenham(g);
}
}
public void bresenham(Graphics g) {
//INPUT
x1 = pusatx + Integer.parseInt(tx1.getText());
y1 = pusaty - Integer.parseInt(ty1.getText());
//default
//x1 = 50;
//y1 = 50;
x2 = pusatx + Integer.parseInt(tx2.getText());
y2 = pusaty - Integer.parseInt(ty2.getText());
if (x1 > x2) {
tmp = x1;
x1 = x2;
x2 = tmp;
tmp = y1;
y1 = y2;
y2 = tmp;
}
dx = x2 - x1;
dy = y2 - y1;
p = (2 * dy) - dx;
if (p != 0) {
do {
if ((y2 < y1 && x2 < x1) || (x2 > x1 && y2 > y1)) {
if (p < 0) {
if (dx > dy) {
x1 = x1 + 1;
p = p + (2 * dy);
} else {
y1 = y1 + 1;
p = p + (2 * dx);
}
} else {
x1 = x1 + 1;
y1 = y1 + 1;
if (dx > dy) {
p = p + ((2 * dy) - (2 * dx));
} else {
p = p + (2 * dx - 2 * dy);
}
}
} else {
if (p > 0) {
if (dx < dy) {
x1 = x1 + 1;
p = p - (2 * dy);
} else {
y1 = y1 - 1;
p = p - (2 * dx);
}
} else {
x1 = x1 + 1;
y1 = y1 - 1;
if (dx < (dy * (-1))) {
p = p - ((2 * dy) + (2 * dx)); //bener
} else {
p = p - ((2 * dx) + (2 * dy * (-1)));
}
}
}
g.fillRect(x1, y1, 1, 1);
} while ((x1 != x2) && (y1 != y2));
}
}
}
public class Brassenham {
public static void main(String[] args) {
new garisB();
}
}
C. Lingkaran
a. method 1
package metodedda;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import static java.lang.Math.sqrt;
import javax.swing.JPanel;
public class Lingkaran extends JPanel {
BufferedImage gambar;
int x, y, r;
public Lingkaran(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
CirclePolar(x, y, r);
}
public void CirclePolar(int xc, int yc, int r){
gambar = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
double x, y;
for(double i = 1.0/r; i <= 2 * Math.PI; i += 1.0/r){
y = yc + r * Math.sin(i);
x = xc + r * Math.cos(i);
gambar.setRGB((int) x, (int) y, Color.yellow.getRGB());
}repaint();
}
public Dimension getPreferredSize() {
return new Dimension(gambar.getWidth(), gambar.getHeight());
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(gambar, null, null);
}
}
b. main method
package metodedda;
import java.awt.Color;
import javax.swing.JFrame;
public class mainLingkaran {
public static void main(String[] args) {
JFrame frame = new JFrame("Lingkaran");
Lingkaran panel = new Lingkaran(150,150,100);
panel.setBackground(Color.red);
frame.add(panel);
frame.pack();
frame.setVisible(true);
frame.setResizable(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Langganan:
Postingan (Atom)