Menerapkan tekstur pada polygon

A. KONSEP TEKSTUR
 Tekstur : penampakan dan sensasi dari permukaan
 Tekstur : citra yang digunakan untuk menentukan karakteristik dari permukaan
 Tekstur : citra multi dimensi yang di petakan ke ruang multi dimensi
Model pencahayaan dan shading Phong masih sangat terbatas dan menghasilkan
tampilan obyek yang kurang menarik
Cara membuat suatu obyek agar menarik :
a) Memakai permukaan yang kompleks :
 Menggunakan banyak polygon
 Kekurangannya geometri menjadi sangat banyak
 Komputasinya berat
b) Menerapkan tekstur pada polygon :
 hanya membutuhkan geometri yang sedikit
 hasil render obyek sama bagusnya
Pemetaan tekstur :

Memetakan sebuah citra pada model / obyek
Pemetaan tekstur :
Cara menempelkan citra pada model
Pemetaan tekstur :
Pemetaan dari berbagai fungsi ke permukaan di bidang 3D
Pemetaan tekstur :
Pemetaan dari berbagai citra ke ruang multi dimensi
B. PEMETAAN TEKSTUR
Bagaimana cara memetakan citra 2D ke permukaan 3D?
Caranya :
a) Menentukan koordinat tekstur :
b) Koordinat 2D (s, t) yang merupakan koordinat pada citra
c) Biasanya mempunyai rentang [0,1])
d) Memetakan koordinat tekstur ke setiap vertex di permukaan 3D
e) Mengubah piksel (nilai RGB) sesuai yang diinginkan
Point pada tekstur disebut texel / texture pixel Tekstur tidak harus berwarna /
mengindikasikan warna Saat penerapan tekstur kita bisa memodifikasi atribut
pada permukaan yang disebut tekstur blending.
Ada 3 operasi texture blending :
 Replace :
mengganti warna permukaan dengan warna tekstur
 Decal :
mengkombinasi warna permukaan dengan warna tekstur dengan alpha (bobot) /
blending
 Modulate :
mengalikan / menambah / mengurangi warna permukaan dengan warna tekstur
(u, v) Tekstur (2D)  Obyek (3D) Lingkungan (3D)  (x, y) Layar (2D) Layar (3D)
– z buffer
1. PEMETAAN TEKSTUR LINEAR
Caranya menggunakan pemetaan langsung ke permukaan
𝑢 = 𝑢𝑚𝑖𝑛 + 𝑠−𝑠𝑚𝑖𝑛 𝑠𝑚𝑎𝑥−𝑠𝑚𝑖𝑛 𝑢𝑚𝑎𝑥 −𝑢𝑚𝑖𝑛
𝑣 = 𝑣𝑚𝑖𝑛 + 𝑡−𝑡𝑚𝑖𝑛 𝑡𝑚𝑎𝑥−𝑡𝑚𝑖𝑛 (𝑣𝑚𝑎𝑥 −𝑣𝑚𝑖𝑛)
2. PEMETAAN TEKSTUR KUBUS
Caranya :
Menggunakan jaring-jaring kubus
Memetakan tekstur di setiap jaring-jaringnya
3. PEMETAAN TEKSTUR SILINDER
Caranya :
Membungkus tekstur dipermukaan silinder kecuali bagian atas dan bawah untuk
menghindari distorsi tekstur
𝑥 = 𝑟cos(2𝜋𝑢)
𝑦 = 𝑟s𝑖𝑛(2𝜋𝑢)
𝑧 = 𝑣/ℎ
Contoh Penerapan Program Lightning
// penyimpanan tekstur
// dalam hal ini satu tekstur saja
GLuint texture[1];
// fungsi untuk membuka citra
AUX_RGBImageRec *loadBMP(char *filename)
{
FILE *File = NULL;
// cek apakah file tersedia
fopen_s(&File, filename, "r");
// bila tersedia lakukan prosedur membaca citra
if (File)
{
fclose(File);
size_t outSize;
wchar_t wtext[256];
mbstowcs_s(&outSize, wtext, filename, strlen(filename) + 1);
LPWSTR filenamePtr = wtext;
return auxDIBImageLoad(filenamePtr);
}
// jika gagal kembalikan NULL
return NULL;
}
// fungsi untuk membuat tekstur dari citra tekstur
int setTextures()
{
int status = FALSE;
// buat alokasi memori untuk penyimpanan tekstur
AUX_RGBImageRec *textureImage[1];
// buat alokasi untuk teksturnya
glGenTextures(1, texture);
memset(textureImage, 0, sizeof(void *) * 1);
// baca citra
if (textureImage[0] = loadBMP("praktikum04.bmp"))
{
status = TRUE;
// buat tekstur dari citra yang sudah dibaca tadi
// dalam hal ini baca tekstur pertama
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, textureImage[0]->sizeX,
textureImage[0]->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE,
textureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
// jika tekstur sudah berhasil dibuat
if (textureImage[0])
{
// bersihkan alokasi memori
if (textureImage[0]->data)
free(textureImage[0]->data);
free(textureImage[0]);
}
return status;
}
Posting Komentar (0)
Lebih baru Lebih lama