• Tidak ada hasil yang ditemukan

TUGAS 2 RESUME Open GL Programming Guide Bab 9 Texture Mapping. Dosen Irfan Maliki, S.T., M.T..

N/A
N/A
Protected

Academic year: 2021

Membagikan "TUGAS 2 RESUME Open GL Programming Guide Bab 9 Texture Mapping. Dosen Irfan Maliki, S.T., M.T.."

Copied!
17
0
0

Teks penuh

(1)

TUGAS 2

RESUME Open GL Programming Guide Bab 9 Texture Mapping

Dosen

Irfan Maliki, S.T., M.T..

Oleh:

Dian Gunawan (10111067) Riky Lutfi Hamzah (10111213) Arief Hidayat Sutomo (10111241) Nyoman Aditya Kusuma W. (10111243)

Jesaya Hasdugan (10111637)

TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER UNIVERSITAS KOMPTER INDONESIA

(2)

Tekstur Objects

Sebuah objek tekstur menyimpan data tekstur dan membuatnya tersedia. Anda mungkin mengontrol banyak tekstur dan kembali ke tekstur yang telah sebelumnya dimuat ke sumber daya tekstur. Menggunakan benda tekstur biasanya Cara tercepat untuk menerapkan tekstur, menghasilkan keuntungan kinerja besar, karena hampir selalu lebih cepat untuk mengikat (reuse) obyek tekstur yang ada dari itu adalah untuk ulang gambar tekstur menggunakan glTexImage * D (). Juga, beberapa implementasi mendukung satu set kerja terbatas tekstur berkinerja tinggi. Anda dapat menggunakan benda tekstur untuk memuat paling Anda sering digunakan tekstur ke daerah terbatas ini.

Untuk menggunakan benda-benda tekstur untuk data tekstur Anda, mengambil langkah-langkah berikut:

1. Menggenerate nama tekstur.

2. Awalnya mengikat (membuat) objek tekstur data tekstur, termasuk array gambar dan sifat tekstur.

3. Jika implementasi Anda mendukung satu set kerja kinerja tinggi , melihat apakah Anda memiliki cukup ruang untuk semua objek tekstur Anda. Jika tidak ada cukup ruang, Anda mungkin ingin menetapkan prioritas untuk masing-masing objek tekstur sehingga tekstur lebih sering digunakan tinggal di set kerja.

4. Bind dan rebind benda tekstur, membuat data mereka saat ini tersedia untuk rendering model bertekstur.

Penamaan Obyek Tekstur

Apa saja unsigned bilangan bulat nol dapat digunakan sebagai nama tekstur. untuk menghindari sengaja menggunakan nama kembali, konsisten menggunakan glGenTextures () untuk menyediakan nama tekstur yang tidak terpakai.

GlIsTexture () menentukan apakah nama tekstur sebenarnya digunakan. Jika tekstur Nama dikembalikan oleh glGenTextures () tetapi belum terikat (memanggil glBindTexture () dengan nama setidaknya sekali), maka glIsTexture () kembali GL_FALSE.

Membuat dan Menggunakan Tekstur Objects Rutinitas yang sama, glBindTexture (), keduanya menciptakan dan menggunakan objek tekstur. Ketika nama tekstur awalnya terikat (digunakan

(3)

dengan glBindTexture ()), baru objek tekstur dibuat dengan nilai-nilai default untuk gambar tekstur dan tekstur properti. Panggilan berikutnya ke glTexImage * (), glTexSubImage * (), glCopyTexImage * (), glCopyTexSubImage * (), glTexParameter * (), dan voidglGenTextures (GLsizei n, GLuint * textureNames); Mengembalikan nama ncurrently terpakai untuk objek tekstur dalam array textureNames. Nama-nama kembali di textureNamesdo tidak harus menjadi Kumpulan bersebelahan bilangan bulat. Nama-nama di textureNamesare ditandai sebagai digunakan, tetapi mereka mendapatkan tekstur negara dan dimensi (1D, 2D, atau 3D) hanya ketika mereka pertama kali terikat. Zero adalah nama tekstur dilindungi dan tidak pernah kembali sebagai nama tekstur dengan glGenTextures (). GLboolean glIsTexture (GLuint textureName); Pengembalian GL_TRUE jika textureNameis nama tekstur yang telah terikat dan belum dihapus kemudian, dan kembali GL_FALSE jika textureNameis nol atau textureNameis nilai nol yang tidak nama dari tekstur yang ada. glPrioritizeTextures () menyimpan data dalam objek tekstur. Objek tekstur mungkin berisi gambar tekstur dan gambar mipmap terkait (jika ada), termasuk data yang terkait seperti lebar, tinggi, lebar perbatasan, intern format, resolusi komponen, dan tekstur properti. tekstur disimpan properti termasuk minification dan pembesaran filter, mode pembungkus, warna border, dan prioritas tekstur. Ketika sebuah obyek tekstur selanjutnya terikat sekali lagi, datanya menjadi negara tekstur saat ini. (Keadaan tekstur terikat sebelumnya adalah diganti.) Setiap kali sebuah objek tekstur terikat sekali lagi, Anda dapat mengedit isi objek tekstur terikat. Setiap perintah yang Anda sebut itu mengubah gambar tekstur atau sifat-sifat lainnya mengubah isi dari saat ini objek tekstur terikat serta kondisi tekstur saat ini. Pada Contoh 9-7, setelah selesai display (), Anda masih terikat pada tekstur yang ditunjuk oleh isi texName [1]. Hati-hati bahwa Anda tidak menelepon rutin tekstur palsu yang mengubah data dalam objek tekstur. Ketika mipmaps digunakan, semua mipmaps terkait gambar tekstur tunggal harus dimasukkan ke dalam objek tekstur tunggal. Pada Contoh 9-5, 0-5 tingkat dari gambar tekstur mipmapped dimasukkan ke objek tekstur tunggal bernama texName. Membersihkan Up Tekstur Objects

Ketika Anda mengikat dan benda-benda tekstur memperlonggar, data mereka masih duduk di suatu tempat di antara sumber daya tekstur. Jika sumber daya tekstur terbatas, menghapus tekstur mungkin salah satu cara untuk membebaskan sumber daya. Sebuah Set Kerja Resident Tekstur Beberapa implementasi OpenGL mendukung satu set kerja kinerja tinggi

(4)

tekstur, yang dikatakan warga. Biasanya, implementasi tersebut memiliki perangkat keras khusus untuk melakukan operasi tekstur dan terbatas

Cache hardware gambar toko tekstur. Dalam hal ini, menggunakan benda tekstur direkomendasikan, karena Anda dapat memuat banyak tekstur ke kerja menetapkan dan kemudian mengendalikan mereka.

Jika semua tekstur yang diperlukan oleh aplikasi melebihi ukuran cache, beberapa tekstur tidak dapat penduduk. Jika Anda ingin mengetahui apakah tekstur tunggal saat ini penduduk, mengikat obyeknya, dan kemudian memanggil glGetTexParameter * v () untuk menentukan nilai yang terkait dengan negara GL_TEXTURE_RESIDENT. Jika Anda ingin tahu tentang status kependudukan tekstur banyak tekstur, penggunaan glAreTexturesResident ().

Perhatikan bahwa glAreTexturesResident () mengembalikan status kependudukan saat ini. Sumber Tekstur sangat dinamis, dan status kependudukan tekstur dapat berubah voidglDeleteTextures (GLsizei n, GLuint const * textureNames);Benda Deletesntexture, dinamai oleh elemen dalam textureNames array. Nama Tekstur dibebaskan sekarang bisa digunakan kembali (misalnya, dengan glGenTextures ()). Jika tekstur yang saat ini terikat dihapus, reverts mengikat ke tekstur baku, seolah-olah glBindTexture () dipanggil dengan nol untuk nilai oftextureName. Upaya untuk menghapus nama tekstur tidak ada atau Nama tekstur nol diabaikan tanpa menghasilkan kesalahan. GLboolean glAreTexturesResident (GLsizei n, const GLuint * textureNames, GLboolean * tinggal); Query status kependudukan tekstur benda ntexture, disebutkan dalam yang textureNames array. residencesis array yang tinggal tekstur Status dikembalikan untuk objek tekstur yang sesuai dalam array textureNames. Jika semua tekstur yang disebutkan dalam textureNamesare penduduk, yang glAreTexturesResident () mengembalikan fungsi GL_TRUE, dan isi dari array residencesare terganggu. Jika ada tekstur di textureNamesis tidak penduduk, maka glAreTexturesResident () mengembalikan GL_FALSE, dan elemen pada rumah tinggal, yang sesuai dengan objek tekstur bukan penduduk intextureNames, juga diatur untuk GL_FALSE. kompatibilitas perpanjangan glAreTextures Resident setiap saat. Beberapa implementasi-cache tekstur ketika mereka pertama kali digunakan. Mungkin perlu untuk menarik dengan tekstur sebelum memeriksa residensi. Jika implementasi OpenGL Anda tidak menetapkan seperangkat kerja tekstur berkinerja tinggi, maka objek tekstur selalu dianggap penduduk. Dalam hal ini, glAreTexturesResident () selalu kembali GL_TRUE dan pada dasarnya tidak memberikan informasi. Tekstur Hotel Strategi Jika Anda

(5)

dapat membuat satu set kerja tekstur dan ingin mendapatkan tekstur terbaik Kinerja mungkin, Anda benar-benar harus tahu secara spesifik implementasi dan aplikasi. Misalnya, dengan simulasi visual atau video yang permainan, Anda harus mempertahankan kinerja dalam segala situasi. Dalam hal ini, Anda seharusnya tidak pernah mengakses tekstur bukan penduduk. Untuk aplikasi ini, Anda ingin untuk memuat semua tekstur Anda pada inisialisasi dan membuat mereka semua penduduk. Jika Anda tidak memiliki memori tekstur cukup tersedia, Anda mungkin perlu untuk mengurangi ukuran, resolusi, dan tingkat mipmaps untuk gambar tekstur Anda, atau Anda dapat menggunakan glTexSubImage * () berulang kali menggunakan kembali memori tekstur yang sama.

Catatan: Jika Anda memiliki beberapa tekstur berumur pendek dengan ukuran yang sama, Anda dapat menggunakan glTexSubImage * () untuk me-reload objek tekstur yang ada dengan berbagai gambar. Teknik ini mungkin lebih efisien daripada menghapus tekstur dan membangun kembali tekstur baru dari awal. Untuk aplikasi yang menciptakan tekstur "on the fly," tekstur bukan penduduk mungkin tidak dapat dihindari. Jika beberapa tekstur yang digunakan lebih sering daripada yang lain, Anda dapat menetapkan prioritas yang lebih tinggi pada obyek-obyek tekstur untuk meningkatkan mereka kemungkinan menjadi penduduk. Menghapus objek tekstur juga membebaskan ruang. Pendek itu, menetapkan prioritas yang lebih rendah ke objek tekstur mungkin akan lebih dulu dalam antrean untuk dipindahkan dari himpunan kerja, sumber daya berkurang. glPrioritizeTextures () digunakan untuk menetapkan prioritas untuk objek tekstur. voidglPrioritizeTextures (GLsizei n, GLuint const * textureNames, const GLclampf * prioritas); Menetapkan objek ntexture, disebutkan dalam textureNames array, tekstur prioritas tinggal di unsur-unsur yang sesuai dari prioritas array. Nilai prioritas dalam prioritiesare berbagai dijepit ke kisaran [0.0, 1.0] sebelum ditugaskan. Nol menunjukkan prioritas terendah (tekstur paling mungkin penduduk), dan 1 menunjukkan prioritas tertinggi. glPrioritizeTextures () tidak mengharuskan salah satu tekstur di textureNamesbe terikat. Namun, prioritas mungkin tidak memiliki efek apapun pada objek tekstur sampai awalnya terikat. kompatibilitas perpanjangan glPrioritizeTextures glTexParameter * () juga dapat digunakan untuk menetapkan prioritas tekstur tunggal, tetapi hanya jika tekstur saat ini terikat. Bahkan, penggunaan glTexParameter * () adalah satu-satunya cara untuk mengatur prioritas dari tekstur default. Jika benda tekstur memiliki prioritas yang sama, implementasi khas OpenGL menerapkan setidaknya baru-baru digunakan (LRU) strategi untuk memutuskan benda yang tekstur pindah dari working set. Jika

(6)

Anda tahu bahwa implementasi OpenGL Anda menggunakan algoritma ini, kemudian setelah prioritas yang sama untuk semua objek tekstur menciptakan sistem LRU wajar untuk realokasi sumber daya tekstur. Jika implementasi dari OpenGL tidak menggunakan strategi LRU untuk tekstur objek prioritas yang sama (atau jika Anda tidak tahu bagaimana memutuskan), Anda dapat menerapkan strategi LRU Anda sendiri dengan hati-hati menjaga tekstur prioritas objek. Ketika tekstur yang digunakan (terikat), Anda dapat memaksimalkan nya prioritas, yang mencerminkan penggunaan baru-baru ini. Kemudian, pada teratur (waktu) interval, Anda dapat menurunkan prioritas dari semua obyek tekstur. Catatan: Fragmentasi memori tekstur bisa menjadi masalah, terutama jika Anda menghapus dan menciptakan berbagai tekstur baru. meskipun dimungkinkan untuk memuat semua benda tekstur menjadi working set oleh mengikat mereka dalam satu urutan, mengikat mereka urutan ina berbeda mungkin meninggalkan beberapa tekstur bukan penduduk.

 Fungsi tekstur

Pada masing-masing contoh yang disajikan sofar dalam bab ini, nilai-nilai dalam peta tekstur telah digunakan secara langsung sebagai warna yang akan dicat di permukaan sedang diberikan. Anda juga dapat menggunakan nilai-nilai dalam peta tekstur untuk memodulasi warna di mana permukaan akan diberikan tanpa texturing atau menggabungkan warna dalam peta tekstur dengan warna asli permukaan. Anda memilih fungsi texturing dengan menyediakan argumen yang tepat untuk glTexEnv * (). voidglTexEnv {if} (target GLenum, GLenum pname, JENIS param); voidglTexEnv {if} v (GLenumtarget, GLenum pname, const TYPE * param); Mengatur fungsi texturing saat ini. targetmust berupa GL_TEXTURE_

FILTER_CONTROL atau GL_TEXTURE_ENV. Iftargetis

GL_TEXTURE_FILTER_CONTROL, maka pnamemust menjadi GL_TEXTURE_LOD_BIAS, dan parami satu, nilai floating-point yang digunakan untuk bias mipmapping tingkat-of-detail parameter. kompatibilitas perpanjangan glTexEnvand semua token terkait Catatan: Ini hanya sebagian daftar nilai yang dapat diterima untuk glTexEnv * (), termasuk fungsi combiner tekstur. Untuk rincian lengkap tentang GL_COMBINE dan daftar lengkap pilihan untuk pnameand param forglTexEnv * (), lihat "Fungsi Tekstur Kombinasi" pada halaman 472 dan Kombinasi fungsi texturing dan format internal dasar menentukan bagaimana tekstur diterapkan untuk setiap komponen tekstur. Fungsi texturing beroperasi pada komponen yang dipilih dari tekstur dan nilai-nilai warna

(7)

yang akan digunakan withno texturing. (Perhatikan bahwa Temukan dilakukan setelah fungsi pixel transfer telah diterapkan.) Ingatlah bahwa ketika Anda menentukan peta tekstur Anda dengan glTexImage * D (), yang Argumen ketiga adalah format internal yang akan dipilih untuk setiap Texel. Ada enam format internal yang dasar: GL_ALPHA, GL_LUMINANCE, GL_ LUMINANCE_ALPHA, GL_INTENSITY, GL_RGB, dan GL_RGBA. lainnya format internal yang (seperti GL_LUMINANCE6_ALPHA2 atau GL_R3_G3_B2) menentukan resolusi yang diinginkan dari komponen tekstur dan dapat dicocokkan untuk salah satu dari enam format internal yang ini dasar. Perhitungan Texturing pada akhirnya di RGBA, tetapi beberapa format internal yang tidak di RGB. Tabel 9-4 menunjukkan bagaimana nilai warna RGBA berasal dari format tekstur yang berbeda, termasuk derivasi kurang jelas. Jika targetis GL_TEXTURE_ENV dan jika pnameis GL_TEXTURE_ENV_MODE, thenparam adalah salah satu GL_DECAL, GL_REPLACE, GL_MODULATE, GL_BLEND, GL_ADD, atau GL_COMBINE, yang menentukan bagaimana tekstur nilai-nilai yang dikombinasikan dengan nilai-nilai warna fragmen yang sedang diproses. Jika pnameis GL_TEXTURE_ENV_COLOR, kemudian parami array 4 angka floating-point (R, G, B, A) yang menunjukkan warna yang akan digunakan untuk operasi GL_BLEND. Jika targetis GL_POINT_SPRITE dan jika pnameis GL_COORD_REPLACE, maka pengaturan paramto GL_TRUE akan memungkinkan iterasi koordinat tekstur di titik sprite. Koordinat tekstur akan tetap konstan di primitif jika param diatur ke GL_FALSE. Format Basis internal Berasal Sumber Warna (R, G, B, A)

GL_ALPHA (0, 0, 0, A) GL_LUMINANCE (L, L, L, 1)

Tabel 9-4 Nilai yang berasal dari Color Format Tekstur Berbeda

Tabel 9-5 dan Tabel 9-6 menunjukkan bagaimana fungsi texturing (kecuali untuk GL_ COMBINE) dan format internal dasar menentukan aplikasi texturing

Rumus yang digunakan untuk setiap komponen tekstur. Pada Tabel 9-5 dan Tabel 9-6, perhatikan penggunaan berikut subskrip:

 sindicates warna sumber tekstur, sebagaimana ditentukan dalam Tabel 9-4.  findicates nilai fragmen yang masuk.

 Nilai cindicates ditugaskan dengan GL_TEXTURE_ENV_COLOR.  Tidak ada subscript menunjukkan akhir, nilai dihitung.

(8)

Dalam tabel ini, perkalian dari tiga warna dengan skalar berarti mengalikan masing-masing komponen R, G, dan B dengan skalar; mengalikan (atau menambah) dua tiga kali lipat warna berarti mengalikan (atau menambah) setiap komponen kedua dengan (atau) komponen yang sesuai dari yang pertama.

GL_LUMINANCE_ALPHA (L, L, L, A) GL_INTENSITY (I, I, I, I)

GL_RGB (R, G, B, 1) GL_RGBA (R, G, B, A)

Basis internal Format GL_REPLACE fungsi GL_MODULATE fungsi GL_DECAL fungsi GL_ALPHA C = Cf A = Sebagai C = Cf A = Af As terdefinisi GL_LUMINANCE C = Cs A = Af C = Cf Cs A = Af terdefinisi GL_LUMINANCE_ALPHA C = Cs A = Sebagai C = Cf Cs A = Af As terdefinisi GL_INTENSITY C = Cs A = Cs

(9)

C = Cf Cs A = Af Cs terdefinisi

Tabel 9-5 Ganti, Memodulasi, dan Fungsi Decal Tekstur Format Basis internal Berasal Sumber Warna (R, G, B, A)

Tabel 9-4 (lanjutan) Nilai yang berasal dari Color Format Tekstur Berbeda Fungsi tekstur pengganti hanya mengambil warna yang akan memiliki telah dicat dalam tidak adanya pemetaan tekstur (warna thefragment ini), melemparkan itu pergi, dan menggantikannya dengan warna tekstur. Anda menggunakan fungsi tekstur pengganti dalam situasi di mana Anda ingin menerapkan buram tekstur ke objek-seperti, misalnya, jika Anda menggambar sup kaleng dengan label buram. Fungsi tekstur decal mirip dengan penggantian, kecuali bahwa ia bekerja untuk hanya RGB dan format internal yang RGBA, dan alpha itprocesses berbeda. Dengan format internal RGBA, warna fragmen ini dicampur dengan warna tekstur dengan rasio ditentukan oleh alpha tekstur, dan fragmen ini alpha tidak berubah. Fungsi tekstur decal dapat digunakan untuk menerapkan alpha dicampur tekstur, seperti lencana pada sayap pesawat.

GL_RGB C = Cs A = Af C = Cf Cs A = Af C = Cs A = Af GL_RGBA C = Cs A = Sebagai C = Cf Cs A = AFAS C = Cf (1 As) + C SAS A = Af

Basis internal Format GL_BLEND Fungsi GL_ADD Fungsi GL_ALPHA C = Cf

(10)

A = Af As C = Cf A = Af As GL_LUMINANCE C = Cf (1 Cs) + C ccs A = Af C = Cf + Cs A = Af GL_LUMINANCE_ALPHA C = Cf (1 Cs) + C ccs A = Af As C = Cf + Cs A = Af As GL_INTENSITY C = Cf (1 Cs) + C ccs A = Af (1 As) + A CA C = Cf + Cs A = Af + As GL_RGB C = Cf (1 Cs) + C ccs A = Af C = Cf + Cs A = Af GL_RGBA C = Cf (1 Cs) + C ccs A = Af As C = Cf + Cs A = Af As

Tabel 9-6 Blend dan Tambahkan Fungsi Tekstur Basis internal Format GL_REPLACE

(11)

fungsi

GL_MODULATE fungsi

GL_DECAL fungsi

Tabel 9-5 (lanjutan) Ganti, Memodulasi, dan Fungsi Decal Tekstur

Untuk modulasi, warna fragmen ini dimodulasi oleh isi peta tekstur. Jika format internal dasar adalah GL_LUMINANCE, GL_ LUMINANCE_ALPHA, atau GL_INTENSITY, nilai warna dikalikan dengan nilai yang sama, sehingga peta tekstur memodulasi antara warna fragmen ini (jika pencahayaan atau intensitas adalah 1) ke hitam (jika 0). Untuk GL_RGB dan Format internal yang GL_RGBA, masing-masing komponen warna yang masuk adalah dikalikan dengan (mungkin berbeda) nilai yang sesuai pada tekstur. Jika ada nilai alpha, itu multipliedby alpha fragmen itu. modulasi adalah fungsi tekstur yang baik untuk digunakan dengan pencahayaan, karena warna poligon menyala dapat digunakan untuk menipiskan warna tekstur. Sebagian besar tekstur-pemetaan contoh di piring warna menggunakan modulasi untuk ini reason.White, specular poligon sering digunakan untuk membuat menyala, benda bertekstur, dan tekstur gambar memberikan warna thediffuse. Fungsi tekstur aditif hanya menambahkan warna tekstur fragmen

warna. Jika ada nilai alpha, itu dikalikan dengan alpha fragmen, kecuali untuk format GL_INTENSITY, di mana intensitas tekstur yang ditambahkan ke alpha fragmen. Kecuali tekstur dan fragmen warna yang hati-hati dipilih, fungsi tekstur aditif mudah menghasilkan jenuh atau dijepit warna. Fungsi tekstur blending adalah satu-satunya fungsi yang menggunakan warna ditentukan oleh GL_TEXTURE_ENV_COLOR. Pencahayaan, intensitas, atau warna Nilai digunakan agak seperti nilai alpha untuk berbaur warna fragmen ini dengan GL_TEXTURE_ENV_COLOR tersebut. (Lihat "Penggunaan Contoh Blending" di Bab 6 untuk contoh billboarding, yang menggunakan tekstur blended.) Nate Robins 'Texture Tutorial Jika Anda telah men-download Suite Nate Robins 'program tutorial, jalankan texturetutorial. Mengubah tekstur-pemetaan lingkungan atribut dan melihat efek dari beberapa fungsi tekstur. Jika Anda menggunakan GL_MODULATE, catatan efek warna yang ditentukan oleh glColor4f (). Jika Anda memilih GL_BLEND, lihat apa yang terjadi jika Anda mengubah warna yang ditentukan oleh env_colorarray tersebut.

(12)

Assigning Texture Coordinates

Ketika kita akan menggambar adegan tekstur yang dipetakan, kita harus memberikan kedua objek koordinat dan tektur koordinat di setiap titik. Setelah transformasi, koordinat objek menentukan dimana titik itu ditulis di layar. Koordinat teksture menentukan texel dalam peta teksture titik itu. Dalam cara yang sama bahwa warna disisipkan diantara dua titik bayangan polygon dan garis, tekstur koordinat disisipkan di antara dua titik. (Ingat bahwa tekstur adalah persegi panjang array data.) Koordinat tekstur dapat terdiri dari satu, dua, tiga, atau empat koordinat. Mereka biasanya disebut sebagai s-, t-, r, dan q-koordinat untuk membedakan mereka dari koordinat objek (x, y, z, dan w) dan dari evaluator koordinat.

Computing Appropriate Texture Coordinates

Tekstur dua dimensi adalah gambar persegi atau persegi panjang yang biasanya dipetakan ke poligon yang membentuk model poligonal. Sebagai contoh, misalkan Anda ingin menampilkan kaleng dengan label melilit pada layar. Untuk mendapatkan tekstur, Anda membeli kaleng, menghapus label, dan menscannya. Misalkan label adalah 4 unit tinggi dan 12 units ekitar, yang menghasilkan rasio aspek 3-1. Karena tex-tures harus memiliki rasioa spek 2n 1, Anda bisa menggunakan sepertiga bagian atas tekstur, atau Anda dapat memotong dan menempelkan tekstur sampai memiliki rasio aspek yang diperlukan. Misalkan Anda memutuskan untuk tidak menggunakan ketiga atas. Sekarang anggaplah kaleng dapat dibentuk silinder diperkirakan oleh 30 poligon panjang 4 unit dan lebar 12/30. Hanya beberapa permukaan melengkung seperti kerucut dan silinder dapat dipetakan ke permukaan datar tanpa distorsi geodesik. Bentuk lainnya memerlukan beberapa distorsi. Secara umum, semakin tinggi kelengkungan permukaan, semakin banyak distorsi tekstur diperlukan.

Repeating and Clamping Textures

Anda dapat menetapkan koordinat tekstur di luar rentang [0, 1] dan mereka baik penjepit atau mengulangi dalam peta tekstur. Dengan mengulangi tekstur, jika Anda memiliki sebuah pesawat besar dengan koordinat tekstur berjalan 0,0-10,0 di kedua arah, misalnya, Anda akan mendapatkan 100 eksemplar dari tekstur ubin bersama-sama di layar. Selama mengulangi,

(13)

bagian integer koordinat tekstur diabaikan, dan salinan peta tekstur permukaan ubin. Untuk sebagian besar aplikasi di mana tekstur harus diulang, texels di atas tekstur harus sesuai dengan di bagian bawah, dan juga untuk tepi kiri dan kanan.

Untuk menjepit Koordinat tekstur, Setiap nilai lebih besar dari 1,0 diatur ke 1.0, dan nilai-nilai kurang dari 0.0 ditetapkan untuk 0.0. Clamping berguna untuk aplikasi di mana Anda ingin satu salinan tekstur untuk muncul di permukaan yang besar. Jika tekstur koordinat dari berbagai permukaan 0,0-10,0 di kedua arah, satu salinan tekstur muncul di sudut kiri bawah permukaan

Jika Anda menggunakan tekstur dengan perbatasan atau telah ditentukan warna perbatasan tekstur, baik mode pembungkus dan metode penyaringan, pengaruh apa dan bagaimana informasi perbatasan digunakan.

Jika Anda menggunakan penyaringan metode GL_NEAREST, yang Texel terdekat dalam tekstur yang digunakan. Bagi kebanyakan mode pembungkus, perbatasan (atau warna border) diabaikan. Namun, jika tekstur koordinat berada di luar jangkauan [0, 1] dan mode pembungkus GL_CLAMP_TO_BORDER, maka perbatasan Texel terdekat dipilih. (Jika tidak ada perbatasan hadir, warna perbatasan konstan digunakan).

Multitexturing

Multitexturing memungkinkan kita untuk menerapkan teknik rendering tingkat lanjut seperti efek pencahayaan (lighting effects), decals, compositing, dan detail tekstur.

Langkah-langkah dalam Multitexturing

Untuk menulis kode program yang menggunakan multitexturing, lakukan langkah-langkah sebagai berikut:

1. Untuk setiap unit texturing, tetapkan kondisi texturing, termasuk tekstur gambar, filter, lingkungan, dan matriks. Gunakan glActiveTexture() untuk mengubah unit tekstur saat ini.

2. Pada spesifikasi vertex, gunakan glMultiTexCoord*() untuk menentukan lebih dari satu tekstur koordinat per titik. Sebuah tekstur yang berbeda koordinat dapat digunakan untuk setiap unit texturing.

(14)

Membangun Unit Tekstur

Multitexturing memiliki beberapa unit tekstur yang memiliki kemampuan identik sebagai berikut.

1. Texture image 2. Filtering parameters 3. Environment application 4. Texture matrix stack

5. Automatic texture-coordinate generation 6. Vertex-array specification (jika dibutuhkan)

Untuk memberikan informasi tekstur ke setiap unit tekstur, rutin glActiveTexture() akan mengubah unit tekstur saat ini. Kemudian, memanggil glTexImage*(), glTexParameter*(), glTexEnv*(), glTexGen*(), dan glBindTexture().

Menentukan Simpul dan Koordinat Teksturnya

Dengan multitexturing, tidak cukup untuk memiliki satu set koordinat tekstur per titik. Anda harus memiliki satu set untuk setiap unit tekstur per titik. Daripada menggunakan glTexCoord*(), Anda harus menggunakan glMultiTexCoord*(), yang menentukan unit tekstur serta koordinat tekstur.

Metode lain dari Spesifikasi Koordinat Tekstur

Secara eksplisit memanggil glMultiTexCoord * () hanya salah satu dari tiga cara untuk menentukan koordinat tekstur saat multitexturing. Dua cara lain untuk menggunakan generasi tekstur koordinat otomatis adalah sebagai berikut.

1. glTexGen*()

(15)

Mengembalikan ke Unit Tekstur Tunggal

Jika Anda menggunakan multitexturing dan ingin mengembalikan ke unit tekstur tunggal, maka Anda perlu menonaktifkan texturing untuk semua unit, kecuali tekstur Unit 0.

Texture Combiner Functions

OpenGL telah berkembang dari fokus awal pada pengolahan vertex (transformasi, kliping) ke arah yang lebih fokus dengan rasterization dan fragmen operasi. Fungsi Texturing semakin terekspos untuk meningkatkan pengolahan fragmen. Selain teknik tekstur multipass, fungsi combiner tekstur yang fleksibel menyediakan programmer dengan kontrol yang lebih baik. Teknik tersebut juga digunakan untuk menggabungkan fragmen dengan tekstur atau nilai warna lainnya. Fungsi combiner Tekstur mendukung efek tekstur berkualitas tinggi, seperti pemetaan tonjolan, pencahayaan yang lebih realistis, dan efek tekstur memudar (seperti interpolasi antara dua tekstur). Fungsi Combiner mengambil warna dan data alpha dari tiga sumber dan memprosesnya sehingga menghasilkan nilai RGBA sebagai output untuk operasi berikutnya.

Fungsi Penggabungan Interpolasi

Fungsi interpolasi membantu menggambarkan penggabungan tekstur, karena menggunakan jumlah maksimum argumen dan beberapa sumber dan mode operan.

Automatic Texture-Coordinate Generation

Anda dapat menggunakan texture mapping untuk membuat kontur pada model, atau untuk mensimulasikan refleksi objek dari sebuah lingkungan.

Untuk mencapai efek ini, OpenGL secara otomatis menghasilkan koordinat tekstur. Jika biasanya menggunakan fungsi glTexCoord*() untuk membuat koordinat tekstur pada sebuah objek. Sekarang untuk menghasilkan tekstur koordinat secara otomatis pada OpenGL, akan menggunakan perintah glTexGen().

(16)

Penggunaan metode pengambilan koordinat tekstur yang berbeda, juga mempunyai fungsi dan hasil yang berbeda pula. Contohnya penggunaan fungsi GL_OBJECT_LINEAR yang akan hanya efektif untuk menempatkan tekstur kayu yang memiliki alur yang hampur sama. Penggunaan fungsi GL_EYE_LINEAR juga lebih tepat untuk memetakan kontur garis yang dinamis pada benda yang bergerak, seperti gerak pesawat. Atau bisa dipakai para ilmuwan untuk memetakan kedalaman tanah dan menganalisis lapisan-lapisan tanah yang terbentuk dengan melihat pada warna lapisan tanah yang terpetakan. Sedangkan GL_SPHERE_MAP dan GL_REFLECTION_MAP digunakan pada pemetaan lingkungan “lengkung”. GL_NORMAL_MAP digunakan untuk memetakan lingkungan “kubus”

Sphere map

Pemetean lingkungan adalah dasar pendekatan dari asumsi dari benda yang berada di lingkungan yang sangat jauh dari permukaan benda pantul, singkatnya seperti benda kecil di sebuah ruangan besar. Untuk dapat melihatnya dengan baik dan sempurna, dibutuhkan cahaya dari arah mata menuju permukaan daerah pantul dan permukaan daerah pantul akan memantulkan cahaya kembali ke mata. Sehingga akan terlihat warna dari setiap bagian dari benda kecil tadi. Pantulan cahaya yang ada akan sangat berpengaruh pada penampakan warna pada permukaan.

Pemetaan sphere map sama saja seperti memetakan lingkungan yang direfleksikan dengan sempurna pada sebuah benda dari lingkungannya. Contohnya pantulan pada sebuah bola kaca. Bayangan dari lingkungan asalnya akan direfleksikan dengan sempurna pada bola kaca tersebut.

Untuk mendapatkan lingkungan pantul yang sempurna pada benda lengkung. Anda akan membutuhkan sebuah bidang lengkung yang permukaannya terlapisi permukaan pantul (seperti kaca atau lapisan perak). Perbandingannya sama seperti melakukan teknik fotografi dengan menggunakan lensa yang jarak fokusnya sangat lebar, bisa dengan menggunakan lensa fish eye atau wide lens. Sehingga akan menghasilkan gambar yang sangat lebar dibanding dengan gambar pada normalnya. Gambar peta lingkungan ini akan digunakan untuk memetakan lingkungan pada OpenGL.

Setelah gambar terbentuk, maka Anda akan membutuhkan algoritma pemetaan lingkungan dari OpenGL. Algoritma ini ekan mencari titik dari permukaan lengkung dengan permukaan

(17)

singgung yang sama seperti dari titik pada objek yang sedang diteliti. Dan warna dari objek dengan warna yang tepat terlihat pada titik yang sesuai.

Cube Map Textures

Peta pada tekstur kubus adalah teknik yang menggabungkan satu set dari 6 buah tekstur gambar dua dimensi untuk membentuk tekstur kubus yang berpusat pada titik asal.

Untuk setiap fragmen, koordinat tekstur diperlakukan sebagai arah vektor. Dengan setiap elemen tekstur mewakili apa yang terlihat dalam tekstur kubus berdasarkan seperti pada aslinya. Tekstur kubus cocok untuk mewakili lingkungan, pemantulan, dan efek cahaya. Tekstur kubus juga dapat digunakan untuk menggambarkan objek lengkung dengan tekstur, dengan mendistribusikan setiap elemen tekstur merata disetiap sisinya.

Konsep dasarnya peta kubus yang tepat kemungkinan di rubah dengan menyiapkan kamera pada lingkungan nyata atau asli dan mengambil enam gambar dengan sudut pengambilan gambar sembilan puluh derajat. Merepresentasikan orientasi sumbu positif dan negatif. Gambar akan memecah seluruh bidang tiga dimensi kedalam enam fustum yang berpotongan pada titik asal.

Cube map secara fungsionalitas adalah ortogonal terhadap banyak operasi pembubuhan tekstur lainnya, sehingga cube map bekerja dengan fitur pembubuhan tekstur standar, seperti tekstur perbatasan, mipmaps, menyalin gambar, subimage, dan multitexturing.

Untuk penggunaan cube map ini, ada sebuah target tekstur proksi khusus untuk cube map di OpenGL, yaitu menggunakan GL_PROXY_TEXTURE_CUBE_MAP. Karena pada umumnya cube map menggunakan sebanyak enam kali jumlah memori seperti tekstur dua dimensi biasanya. Parameter tekstur dan objek tekstur seharusnya dibangun untuk cube map sepenuhnya, tidak untuk enam permukaan kubus secara individual.

Referensi

Dokumen terkait

(2) Bank Penyalur atau Perusahaan Pembiayaan Penyalur sebagaimana dimaksud pada ayat (1) dapat mencairkan Besaran Penyaluran Pembiayaan Tapera sesuai dengan

Diharapkan pihak perusahaan dapat mempertahankan serta meningkatkan mutu dari Earning Per Share (X3 ), karena variabel Earning Per Share (X3 ) mempunyai pengaruh yang

produksi sebagai dasar penentuan harga jual tapioka; (3) nilai tambah pada proses pembuatan tapioka untuk mengetahui balasan terhadap faktor produksi yang dihasilkan serta kesempatan

Karsinoma mungkin timbul dalam segmen kecil atau besar pada usus yang terlibat penyakit ileitis terminalis, khususnya pada segmen dimana terdapat aliran faeces dengan

Bila ikatan opiat ini dighentikan dengan mendadak atau diganti dengan obat yang bersifat antagonis opioid, maka akan terjadi peningkatan efek adenilsilase pada siklik AMP

Sesuai dengan judul dalam penelitian ini, maka yang menjadi sampel penelitian adalah : Wajib Pajak Badan yang melakukan restitusi PPN LB dan Fiskus.. Berdasarkan pada

Nilai indek dalam citra MODIS pada daerah tumpahan minyak dengan menggunakan algoritma indek floresen dan indek tumpahan minyak akan lebih tinggi dari daerah

Sebelumnya penelitian serupa sudah pernah diuji oleh Zubaimari, Rika Anggraini dengan judul penelitian pengaruh mata pelajaran prakarya dan kewirausahaan terhadap