Cara Membuat Mobil dengan Opengl
Pertama kita masuk dahulu ke NeatbBeans IDE 8.2/ NetBeans 8.1 yang penting uda ada lwjgl nya
Setelah masuk kita buat new project seperti gambar dibawah sini;
Jika sudah membuat new project pasti akan muncul kotak dialog dan pastikan kalian pilihannya ada di Java Application seperti ini nih;
Lalu next; aku kasih nama projectnya Mobilrpla (bebas) setelah itu pilih finish.
Setelah itu maka akan tampil seperti ini;
Sebelum itu import dulu lwjglnya dan masukan koding di bawah package mobilrpla;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
Jika ada tanda merah dinomernya itu tandanya kalian belum meng-add library nya, kalian tinggal klik kanan di libraries setelah itu add library dan pilih lwjgl yang sudah dimasukan di neatbeans.
Setelah itu lanjut ke koding dibawah public class Mobilrpla {
float x = 400, y = 300;
float rotation = 0;
long lastFrame;
int fps;
long lastFPS;
//Kecepatan putaran
float kecepatan = 0f;
public void start(){
try{
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
}catch (LWJGLException e){
e.printStackTrace();
System.exit(0);
}
initGL();
getDelta();
lastFPS = getTime();
while (!Display.isCloseRequested()){
int delta = getDelta();
update(delta);
renderGL();
Display.update();
Display.sync(60);
}
Display.destroy();
}
public void update(int delta){
rotation += kecepatan * delta;
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) x -= 0.35f * delta;
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) x += 0.35f * delta;
if (x < 0) x = 800;
if (x > 800) x = 0;
if (y < 0) y = 600;
if (y > 600) y = 0;
updateFPS();
}
public int getDelta(){
long time = getTime();
int delta = (int) (time - lastFrame);
lastFrame = time;
return delta;
}
public long getTime(){
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}
public void updateFPS(){
if (getTime() - lastFPS > 1000){
Display.setTitle("FPS: " + fps);
fps = 0;
lastFPS += 1000;
}
fps++;
}
public void initGL(){
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
public void renderGL(){
GL11.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glPushMatrix();
GL11.glTranslatef(x, y, 0);
GL11.glRotatef(rotation, 0f, 0f, 1f);
GL11.glTranslatef(-x, -y, 0);
atap();
kaca1();
bawah();
bumper();
pijakan();
jarak1();
jarak2();
ban1();
ban_dalam1();
ban2();
ban_dalam2();
GL11.glPopMatrix();
}
public void atap(){
GL11.glColor3f(0.7f,0.09f,0.00f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 30, y + 40);
GL11.glVertex2f(x + 110, y + 40);
GL11.glVertex2f(x + 70, y + 100);
GL11.glVertex2f(x - 10, y + 100);
GL11.glEnd();
}
public void kaca1() {
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 15, y + 40);
GL11.glVertex2f(x + 90, y + 40);
GL11.glVertex2f(x + 60, y + 90);
GL11.glVertex2f(x - 1, y + 90);
GL11.glEnd();
}
public void bawah(){
GL11.glColor3f(0.0f,0.0f,1.06f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 180, y - 30);
GL11.glVertex2f(x + 180, y - 30);
GL11.glVertex2f(x + 180, y + 45);
GL11.glVertex2f(x - 180, y + 45);
GL11.glEnd();
}
public void pijakan() {
GL11.glColor3f(0.0f,1.0f,1.5f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 65, y - 21);
GL11.glVertex2f(x + 65, y - 21);
GL11.glVertex2f(x + 65, y - 15);
GL11.glVertex2f(x - 65, y - 15);
GL11.glEnd();
}
public void bumper() {
GL11.glColor3f(0.77f,0.09f,0.09f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 187, y - 30);
GL11.glVertex2f(x + 187, y - 30);
GL11.glVertex2f(x + 187, y - 10);
GL11.glVertex2f(x - 187, y - 10);
GL11.glEnd();
}
public void jarak1() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+38*Math.cos(sudut);
double y = this.y-30+38*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void jarak2() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+38*Math.cos(sudut);
double y = this.y-30+38*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban1() {
GL11.glColor3f(0.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+35*Math.cos(sudut);
double y = this.y-30+35*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban_dalam1() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+15*Math.cos(sudut);
double y = this.y-30+15*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban2() {
GL11.glColor3f(0.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+35*Math.cos(sudut);
double y = this.y-30+35*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban_dalam2() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+15*Math.cos(sudut);
double y = this.y-30+15*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
Jika koding yang kalian masukan tadi masih ada tanda merahnya kalian klik kanan di gambar cangkir->properties->run->VM.Options ketikan -Djava.library.path="C:\LWJGL\lwjgl-2.9.1\native\windows" (untuk yang tanda kutip itu tergantung kalian simpan lwjglnya dimana).
Jika sudah masukan koding untuk menampilkannya;
Mobilrpla mobil = new Mobilrpla();
mobil.start();
}
}
Setelah sudah tidak ada tanda merah kalian tinggal coba Run deh, dan contoh hasilnya taraaa...
Itu mobilnya kalo di run bisa digerakin maju mundur ya menggunakan tanda panah yang ada dikeyboard masing-masing bisa rubah warna juga sesuai selera di GL_Colour entah itu mau diganti warna kaca,bumper,pijakan dan atap ya
Setelah masuk kita buat new project seperti gambar dibawah sini;
Jika sudah membuat new project pasti akan muncul kotak dialog dan pastikan kalian pilihannya ada di Java Application seperti ini nih;
Lalu next; aku kasih nama projectnya Mobilrpla (bebas) setelah itu pilih finish.
Setelah itu maka akan tampil seperti ini;
Sebelum itu import dulu lwjglnya dan masukan koding di bawah package mobilrpla;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
Jika ada tanda merah dinomernya itu tandanya kalian belum meng-add library nya, kalian tinggal klik kanan di libraries setelah itu add library dan pilih lwjgl yang sudah dimasukan di neatbeans.
Setelah itu lanjut ke koding dibawah public class Mobilrpla {
float x = 400, y = 300;
float rotation = 0;
long lastFrame;
int fps;
long lastFPS;
//Kecepatan putaran
float kecepatan = 0f;
public void start(){
try{
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
}catch (LWJGLException e){
e.printStackTrace();
System.exit(0);
}
initGL();
getDelta();
lastFPS = getTime();
while (!Display.isCloseRequested()){
int delta = getDelta();
update(delta);
renderGL();
Display.update();
Display.sync(60);
}
Display.destroy();
}
public void update(int delta){
rotation += kecepatan * delta;
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) x -= 0.35f * delta;
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) x += 0.35f * delta;
if (x < 0) x = 800;
if (x > 800) x = 0;
if (y < 0) y = 600;
if (y > 600) y = 0;
updateFPS();
}
public int getDelta(){
long time = getTime();
int delta = (int) (time - lastFrame);
lastFrame = time;
return delta;
}
public long getTime(){
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}
public void updateFPS(){
if (getTime() - lastFPS > 1000){
Display.setTitle("FPS: " + fps);
fps = 0;
lastFPS += 1000;
}
fps++;
}
public void initGL(){
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
public void renderGL(){
GL11.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glPushMatrix();
GL11.glTranslatef(x, y, 0);
GL11.glRotatef(rotation, 0f, 0f, 1f);
GL11.glTranslatef(-x, -y, 0);
atap();
kaca1();
bawah();
bumper();
pijakan();
jarak1();
jarak2();
ban1();
ban_dalam1();
ban2();
ban_dalam2();
GL11.glPopMatrix();
}
public void atap(){
GL11.glColor3f(0.7f,0.09f,0.00f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 30, y + 40);
GL11.glVertex2f(x + 110, y + 40);
GL11.glVertex2f(x + 70, y + 100);
GL11.glVertex2f(x - 10, y + 100);
GL11.glEnd();
}
public void kaca1() {
GL11.glColor3f(1.0f,1.0f,1.0f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 15, y + 40);
GL11.glVertex2f(x + 90, y + 40);
GL11.glVertex2f(x + 60, y + 90);
GL11.glVertex2f(x - 1, y + 90);
GL11.glEnd();
}
public void bawah(){
GL11.glColor3f(0.0f,0.0f,1.06f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 180, y - 30);
GL11.glVertex2f(x + 180, y - 30);
GL11.glVertex2f(x + 180, y + 45);
GL11.glVertex2f(x - 180, y + 45);
GL11.glEnd();
}
public void pijakan() {
GL11.glColor3f(0.0f,1.0f,1.5f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 65, y - 21);
GL11.glVertex2f(x + 65, y - 21);
GL11.glVertex2f(x + 65, y - 15);
GL11.glVertex2f(x - 65, y - 15);
GL11.glEnd();
}
public void bumper() {
GL11.glColor3f(0.77f,0.09f,0.09f);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(x - 187, y - 30);
GL11.glVertex2f(x + 187, y - 30);
GL11.glVertex2f(x + 187, y - 10);
GL11.glVertex2f(x - 187, y - 10);
GL11.glEnd();
}
public void jarak1() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+38*Math.cos(sudut);
double y = this.y-30+38*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void jarak2() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+38*Math.cos(sudut);
double y = this.y-30+38*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban1() {
GL11.glColor3f(0.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+35*Math.cos(sudut);
double y = this.y-30+35*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban_dalam1() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x-110+15*Math.cos(sudut);
double y = this.y-30+15*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban2() {
GL11.glColor3f(0.0f, 0.0f, 0.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+35*Math.cos(sudut);
double y = this.y-30+35*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
public void ban_dalam2() {
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glBegin(GL11.GL_POLYGON);
for (int i=0;i<360;i++) {
double sudut=i*(2*Math.PI/10);
double x = this.x+110+15*Math.cos(sudut);
double y = this.y-30+15*Math.sin(sudut);
GL11.glVertex2d(x,y);
}
GL11.glEnd();
}
Jika koding yang kalian masukan tadi masih ada tanda merahnya kalian klik kanan di gambar cangkir->properties->run->VM.Options ketikan -Djava.library.path="C:\LWJGL\lwjgl-2.9.1\native\windows" (untuk yang tanda kutip itu tergantung kalian simpan lwjglnya dimana).
Jika sudah masukan koding untuk menampilkannya;
Mobilrpla mobil = new Mobilrpla();
mobil.start();
}
}
Setelah sudah tidak ada tanda merah kalian tinggal coba Run deh, dan contoh hasilnya taraaa...
Itu mobilnya kalo di run bisa digerakin maju mundur ya menggunakan tanda panah yang ada dikeyboard masing-masing bisa rubah warna juga sesuai selera di GL_Colour entah itu mau diganti warna kaca,bumper,pijakan dan atap ya
^^Finish^^






Komentar
Posting Komentar