dokumen-dokumen yang mirip



Persiapan Sebelum mengikuti tutorial ini, ada baiknya pembaca telah membaca beberapa tutorial sebagai berikut:

Translasi Translasi artinya kita menggeser posisi dari posisi x,y,z ke posisi x2,y2 dan z2. Translasi dapat dilakukan dengan cara memanggil fungsi:

Persiapan Sebelum mengikuti tutorial ini, ada baiknya pembaca telah membaca beberapa tutorial sebagai berikut:

Class yang dipakai Untuk membuat tampilan map pada Android, kita bisa memanfaatkan MapView sebagai berikut:

Ijin Akses Agar program kita dapat mengakses GPS, kita harus menambahkan permission pada AndroidManifest.xml sebagai berikut:

[Pemrograman Android Widget 01][Level: Pemula] Andi Taru Nugroho Nur Wismono S.Kom.,M.Cs. Lisensi Dokumen:

[Pemrograman Android Dasar 02][Level: Pemula] Andi Taru Nugroho Nur Wismono S.Kom.,M.Cs. Lisensi Dokumen:

[Pemrograman Android GPS MAP 02][Level: Menengah] Andi Taru Nugroho Nur Wismono S.Kom.,M.Cs. Lisensi Dokumen:

Persiapan Sebelum mengikuti tutorial ini, ada baiknya pembaca mendownload perangkat lunak yang dibutuhkan yaitu sebagai berikut:

Pembuatan Aplikasi Android Sederhana dengan Eclipse

Praktikum 1 - Getting Started with Android

Membuat project Android di Eclipse Struktur project pada eclipse Mengenal Tag Layout User Interface

Tutorial Membuat Aplikasi Web View Android pada Eclipse

PROGRAM STUDI D3 JURUSAN TEKNIK KOMPUTER POLITEKNIK NEGERI SRIWIJAYA PALEMBANG Pemrograman Berorientasi Objek 3 (Mobile And Web Programming)

Membuat Alert Dialog Pada Android

[Pelatihan Pemrograman Android]

Modul Pengembangan Aplikasi Android Berbasis Client- Server Aplikasi sederhana android Versi 1.0

Latihan 2 List Menu Bertingkat

PEMROGRAMAN GAME MOBILE Tugas III Contoh Sprite. Oleh : I Dewa Made Yuda Aditya Putra

Cara Membuat Aplikasi Android Sederhana Menggunakan Eclipse

Struktur & Pemakaian Teknologi Game Struktur Project Android

DAFTAR PUSTAKA. A. S., R., & Shalahuddin, M. (2013). Rekayasa Perangkat Lunak Terstruktur dan Berorientasi Objek. Bandung: Informatika.

Praktikum VI Activity dan Intent

Membuat Tab Layout Menggunakan Android Material Design

Workshop Struktur dan Pemakaian Teknologi Game BAB 4. Menu

Pertemuan 2. Pemrograman Mobile. 3 SKS Semester 7 S1 Sistem Informasi. Nizar Rabbi Radliya

Penggunaan Netbeans IDE, Hello World, variable dan Operator aritmetika.

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

TUTORIAL PEMBUATAN APLIKASI SEDERHANA TOUCH AND GESTURE PADA ANDROID

Cara Membuat Background Dinamis di Android

Tutorial berikut akan mengajarkan rekan-rekan cara membuat kalkulator sederhana di android.

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

ARTIKEL TUGAS AKHIR TUTORIAL APLIKASI RUMUS-RUMUS FISIKA LISTRIK DINAMIS DASAR BERBASIS ANDROID

Praktikum 9 Pemprograman Android GUI 2 Layar

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

Modul Aplikasi Mobile. Pertemuan ke-2. Pengenalan environment android pada eclipse

Cara Membuat Layout Dynamic di Android

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

Praktikum XI Animasi dan Multimedia

Location Based Services

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

Praktikum XI Animasi dan Multimedia

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

PAPB-C. Yang harus dipersiapkan: 1. Eclipse 2. AVD/GenieMotion 3. JDK Membuat Android Application Project Baru

Latihan 1 Menghitung Luas Persegi Panjang

Membuat list dengan RecylerView dan dependency injection ButterKniffe

LAB02 : KODING PROGRAM

Membuat Aplikasi Sederhana Hello World untuk Android

Praktikum I Pengenalan Android

MODUL 14 INTERKONEKSI CLIENT-SERVER ANDROID

BAB IV IMPLEMENTASI DAN PENGUJIAN

Membuat Interface Dinamis Menggunakan FrameLayout

Variabel dan tipe data

Tutorial Web Service JAX-WS Konverter Suhu dengan NetBeans

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

Menulis Aplikasi untuk Android Bagian I

Membuat Spash Screen

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

visit :

PEMOGRAMAN APLIKASI BERGERAK (Java ME) Yoannita

Menampilkan Map. B. Menambahkan referensi library google-play-service.jar ke dalam project

LAYOUT MENU UTAMA. <Button android:text="zakat Profesi" android:layout_width="wrap_content"

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

Custom Button pada Android Februari 2012 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir Platform : Android 2.3, Eclipse

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

BAHASA PEMROGRAMAN JAVA

Praktikum IX Drag and Drop GUI dan Image Gallery

TUTORIAL APLIKASI ANDROID COOL HELLO WORLD

DAPATKAN SEGERAA!!!!! PERSEDIAAN TERBATASS!

MODUL 10 KOMPONEN GUI ANDROID

Membuat Simple List Transaksi

MOBILE PROGRAMMING. Oleh : CHALIFA CHAZAR

Menggunakan Database di Android Desember 2011 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir Platform : Android 2.

Struktur & Pemakaian Teknologi Game Pembuatan Activity

MODUL 13 KOMPONEN GUI ANDROID

Call Phone Permission pada Android

MODUL 1 PRAKTIKUM ALGORITMA & PEMROGRAMAN I

Membuat UI Cantik Dan Serasi Di Android Menggunakan Palette Library Material Design

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

MEMULAI ECLIPSE. Juli 2009 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir.

LAMPIRAN A. Universitas Sumatera Utara

Program Database Sederhana di Android Desember 2011 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir Platform : Android 2.

Membuat Chating Messager Di Android

Tabel 1. Instruksi untuk menampilkan teks No. Bahasa Pemrograman Instruksi 1. Pascal WRITE ( Bahasa pemrograman itu mudah );

UNIVERSITAS KOMPUTER INDONESIA

Pertemuan 7. Create, Read, Update, Delete Pada SQL Lite (Tampilan)

Pengembangan Canvas J2ME : Gradasi Kotak

Web Service: Memulai Proyek

Rekomendasi Min Perangkat Keras. Prosesor dual core 1.5 GHz RAM 2 GB Monitor 10 " VGA Onboard Keyboard PS2 Mouse PS2

Dwiny Meidelfi, M.Cs

DASAR PEMOGRAMAN JAVA

Ginanjar Utama Workbench Tempat Bekerja

PRAKTIKUM IX:TUTORIAL PEMBUATAN

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

Transkripsi:

Android OpenGL Part 6 - Texture [Pemrograman OpenGL Android 06][Level: Mahir] Andi Taru Nugroho Nur Wismono S.Kom.,M.Cs. andi.taru@gmail.com Lisensi Dokumen: Copyright 2012 JavaClopedia.com Seluruh dokumen di JavaClopedia.com dapat digunakan dan disebarkan secara bebas untuk tujuan non-komersial dan harus menyertakan penulis serta sumber asli dokumen yaitu JavaClopedia.com. Penulisan ulang tidak diperkenankan tanpa seijin JavaClopedia.com Persiapan Sebelum mengikuti tutorial ini, ada baiknya pembaca telah membaca beberapa tutorial sebagai berikut: - Pemrograman Dasar Android 01 - Instalasi di http://www.javaclopedia.com/ - Pemrograman Android OpenGL 01 Hello Android OpenGL di http://javaclopedia.com/40/android-opengl-part-1.php - Pemrograman Android OpenGL 02 Polygon di OpenGL http://javaclopedia.com/40/android-opengl-part-2.php - Pemrograman Android OpenGL 03 Transformasi http://javaclopedia.com/69/tutorial-dasar-android-opengl-part-3-transformasi.php - Pemrograman Android OpenGL 04-Color http://javaclopedia.com/75/tutorial-dasar-android-opengl-part-4-color.php - Pemrograman Android OpenGL 05-Cube http://javaclopedia.com/79/tutorial-dasar-android-opengl-part-5-cube.php Pendahuluan Pada tutorial sebelumnya, kita sudah belajar membuat Cube dengan menggunakan Polygon. Nah, pada tutorial ini, kita akan belajar sesuatu yang menarik yaitu Texture. Dengan menggunakan texture, kita akan bisa membuat Cube yang telah kita buat sebelumnya memiliki tekstur gambar.

Texture Untuk melakukan loading texture, kita dapat menggunakan cara berikut ini: protected int loadtexture(gl10 gl, int resource) { int[] tmp_tex = new int[1]; gl.glgentextures(1, tmp_tex, 0); int tex = tmp_tex[0]; Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resource); gl.glbindtexture(gl10.gl_texture_2d, tex); gl.glteximage2d(gl10.gl_texture_2d, 0, GL10.GL_RGBA, bmp.getwidth(), bmp.getheight(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, null); gl.gltexsubimage2d(gl10.gl_texture_2d, 0, 0, 0, bmp.getwidth(), bmp.getheight(), GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, makebytebuffer(bmp)); gl.gltexparameterf(gl10.gl_texture_2d, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.gltexparameterf(gl10.gl_texture_2d, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); return tex; Berikutnya, kita harus mengaktifkan state Texture agar texture dapat berjalan di OpenGL gl.glenable(gl10.gl_texture_2d); kemudian kita dapat menggambarkan texture tersebut dengan cara: gl.gltexcoordpointer(2, GL10.GL_FLOAT, 0, texbuff); gl.glenableclientstate(gl10.gl_texture_coord_array); ANDROID IN ACTION! Tidak perlu berlama-lama, mari kita praktikan di dalam pemrograman: 1. Buka Editor Eclipse 2. Buat project baru dengan cara File > New > Other > Android > Android Project > Next. 3. Isikan inputan seperti gambar di bawah ini:

4. Tekan Finish 5. Expand Project AndroidOpenGL06Texture masuk ke bagian src kemudian klik kanan package com.javaclopedia.opengltexture > New > Class. 6. Isikan inputan seperti gambar di bawah kemudian tekan Finish.

7. Akan muncul source code baru seperti gambar di bawah: 8. Lengkapi kode program menjadi seperti berikut ini: package com.javaclopedia.opengltexture; import java.nio.bytebuffer; import java.nio.byteorder; import java.nio.floatbuffer; import java.nio.intbuffer; import javax.microedition.khronos.opengles.gl10;

import android.content.context; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.opengl.glu; public class Cube { Context context; float box[] = new float[] { // FRONT 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, // BACK -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, // LEFT -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, // RIGHT 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, // TOP -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, // BOTTOM -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, ; float texcoords[] = new float[] { // FRONT 0.0f, 1.0f, // BACK 0.0f, 1.0f, // LEFT 0.0f, 1.0f, // RIGHT

; 0.0f, 1.0f, // TOP 0.0f, 1.0f, // BOTTOM 0.0f, 1.0f FloatBuffer cubebuff; FloatBuffer texbuff; float xrot = 0.0f; float yrot = 0.0f; int tex; public Cube(Context context) { this.context = context; cubebuff = makefloatbuffer(box); texbuff = makefloatbuffer(texcoords); protected void init(gl10 gl) { gl.glclearcolor( 0.0f, 1.0f); gl.glenable(gl10.gl_depth_test); gl.glenable(gl10.gl_cull_face); gl.gldepthfunc(gl10.gl_lequal); gl.glcleardepthf(1.0f); gl.glshademodel(gl10.gl_smooth); gl.glenable(gl10.gl_texture_2d); tex = loadtexture(gl, R.drawable.icon); public void ondrawframe(gl10 gl) { gl.glclear(gl10.gl_color_buffer_bit GL10.GL_DEPTH_BUFFER_BIT); gl.glmatrixmode(gl10.gl_modelview); gl.glloadidentity(); GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0); gl.glvertexpointer(3, GL10.GL_FLOAT, 0, cubebuff); gl.glenableclientstate(gl10.gl_vertex_array); gl.gltexcoordpointer(2, GL10.GL_FLOAT, 0, texbuff); gl.glenableclientstate(gl10.gl_texture_coord_array); gl.glrotatef(xrot, 1, 0, 0); gl.glrotatef(yrot, 0, 1, 0); gl.glcolor4f(1.0f, 0, 0, 1.0f); gl.gldrawarrays(gl10.gl_triangle_strip, 0, 4); gl.gldrawarrays(gl10.gl_triangle_strip, 4, 4);

gl.glcolor4f(0, 1.0f, 0, 1.0f); gl.gldrawarrays(gl10.gl_triangle_strip, 8, 4); gl.gldrawarrays(gl10.gl_triangle_strip, 12, 4); gl.glcolor4f(0, 0, 1.0f, 1.0f); gl.gldrawarrays(gl10.gl_triangle_strip, 16, 4); gl.gldrawarrays(gl10.gl_triangle_strip, 20, 4); xrot += 1.0f; yrot += 0.5f; protected static FloatBuffer makefloatbuffer(float[] arr) { ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4); bb.order(byteorder.nativeorder()); FloatBuffer fb = bb.asfloatbuffer(); fb.put(arr); fb.position(0); return fb; protected static ByteBuffer makebytebuffer(bitmap bmp) { ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight()*bmp.getWidth()*4); bb.order(byteorder.big_endian); IntBuffer ib = bb.asintbuffer(); for (int y = 0; y < bmp.getheight(); y++) for (int x=0;x<bmp.getwidth();x++) { int pix = bmp.getpixel(x, bmp.getheight()-y-1); // Convert ARGB -> RGBA byte alpha = (byte)((pix >> 24)&0xFF); byte red = (byte)((pix >> 16)&0xFF); byte green = (byte)((pix >> 8)&0xFF); byte blue = (byte)((pix)&0xff); ib.put(((red&0xff) << 24) ((green&0xff) << 16) ((blue&0xff) << 8) ((alpha&0xff))); ib.position(0); bb.position(0); return bb; protected int loadtexture(gl10 gl, int resource) { int[] tmp_tex = new int[1]; gl.glgentextures(1, tmp_tex, 0); int tex = tmp_tex[0]; Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), resource); gl.glbindtexture(gl10.gl_texture_2d, tex); gl.glteximage2d(gl10.gl_texture_2d, 0, GL10.GL_RGBA, bmp.getwidth(), bmp.getheight(), 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, null);

gl.gltexsubimage2d(gl10.gl_texture_2d, 0, 0, 0, bmp.getwidth(), bmp.getheight(), GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, makebytebuffer(bmp)); gl.gltexparameterf(gl10.gl_texture_2d, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.gltexparameterf(gl10.gl_texture_2d, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); return tex; 9. Expand Project AndroidOpenGL06Texture masuk ke bagian src kemudian klik kanan package com.javaclopedia.opengltexture > New > Class. 10. Isikan inputan seperti gambar di bawah kemudian tekan Finish.

11. Akan muncul source code baru seperti gambar di bawah: 12. Lengkapi kode program menjadi seperti berikut ini: package com.javaclopedia.opengltexture; import javax.microedition.khronos.egl.eglconfig; import javax.microedition.khronos.opengles.gl10; import android.content.context; import android.opengl.glu; import android.opengl.glsurfaceview.renderer; public class TaruRenderer implements Renderer { private Cube cube; public TaruRenderer(Context context) { cube = new Cube(context); public void onsurfacecreated(gl10 gl, EGLConfig config) { gl.glclearcolor( 0.0f, 0.5f); gl.glshademodel(gl10.gl_smooth); gl.glcleardepthf(1.0f); gl.glenable(gl10.gl_depth_test); gl.gldepthfunc(gl10.gl_lequal); gl.glhint(gl10.gl_perspective_correction_hint, GL10.GL_NICEST); cube.init(gl); public void ondrawframe(gl10 gl) { gl.glclear(gl10.gl_color_buffer_bit GL10.GL_DEPTH_BUFFER_BIT); gl.glloadidentity(); gl.gltranslatef(0, 0, -4); cube.ondrawframe(gl); public void onsurfacechanged(gl10 gl, int width, int height) { gl.glviewport(0, 0, width, height); gl.glmatrixmode(gl10.gl_projection); gl.glloadidentity(); GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f); gl.glmatrixmode(gl10.gl_modelview); gl.glloadidentity();

13. Buka class Main, dan ubah menjadi seperti berikut ini: package com.javaclopedia.opengltexture; import android.app.activity; import android.opengl.glsurfaceview; import android.os.bundle; import android.view.window; import android.view.windowmanager; public class Main extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); this.requestwindowfeature(window.feature_no_title); getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,windowmanager.layoutparams.flag_fullscreen); GLSurfaceView view = new GLSurfaceView(this); view.setrenderer(new TaruRenderer(this)); setcontentview(view); 14. Setelah itu, kita jalankan aplikasi kita dengan cara, Klik Kanan Project AndroidOpenGL06Texture > Run As > Android Application.

15. Jika Emulator sudah menunjukkan seperti Gambar di atas, maka tekan tombol MENU pada emulator. 16. Jika sudah muncul seperti tampilan di atas, berarti Pembaca telah berhasil membuat aplikasi Texture OpenGL di Android. SELAMAT!!! Catatan Texture memiliki berbagai macam kegunaan. Baik itu dalam pembuatan animasi 3D maupun untuk pembuatan Game Android OpenGL. Kesimpulan 1. Texture dapat dibuat dari Bitmap Resource. 2. Untuk mengaktifkan texture kita dapat melakukan enabled, GL_TEXTURE_2D 3. Texture di draw menggunakan gltexcoord(). Biografi Penulis Andi Taru Nugroho Nur Wismono, Lahir di Tuntang, 01 April 1987. Menyelesaikan S1 Fakultas TI-TI pada tahun 2009 dan menyelesaikan S2 Fakultas TI-SI pada tahun 2011. Penulis merupakan founder dari JavaClopedia.com juga Founder dan CEO perusahaan IT EducaStudio (educastudio.com). Fokus penulis ada pada pemrograman Java baik itu pemrograman game, pemrograman desktop, pemrograman mobile dan pemrograman enterprise. Pengalaman belajar Java penulis, dimulai sejak tahun 2005. Ingin konsultasi pemrograman Java dan Android? request tutorial? Kritik dan Saran? Kirimkan email ke andi.taru@gmail.com