Selamat Pagi rekan-rekan sekalian yang ganteng-ganteng dan yang cantik-cantik...
Hari ini aku akan memberikan contoh tesktur yang lain dari sebelumnya, pada artikel sebelumnya aku membahas tentang file bitmap 24 bit yang dijadikan tekstur. Kali ini aku akan memperkenalkan file TGA 32 bit yang akan dijadikan tesktur.
Pada gambar di atas rekan-rekan bisa melihat pagar dan daun, pagar dibentuk dari 1 (satu polygon) dan diberi tekstur TGA 32 bit. Tetapi ada bagian dari pagar yang transparan, sehingga objek 3D (pohon) di belakangnya akan tampak. Tekstur TGA 32 bit banyak digunakan untuk objek 3D seperti pagar dan daun, tujuannya untuk memudahkan pemrograman serta menghemat jumlah polygon. Objek 3D pohon adalah contoh objek 3D yang bisa digunakan untuk game 3D karena hanya menggunakan sedikit polygon (pohon dibuat dengan menggunakan 3ds max).
File TGA 32 bit bisa dibuat dengan bantuan software pengolah citra seperti Photoshop (gambar di atas).
Untuk membuat tekstur TGA 32 bit diperlukan fungsi load dan jangan lupa untuk menambahkan dua baris perintah berikut ini.
----------------------------------------------------
//untuk TGA tekstur
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0);
----------------------------------------------------
bool LoadTGA(unsigned int &TeksturID, char *filename)
{
unsigned char standard_tga_header[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
unsigned char *tga_Data;
unsigned int tga_width;
unsigned int tga_height;
unsigned char Load_tga_header[12];
unsigned char tga_header_6bytes[6];
unsigned int byte_per_pixel;
unsigned int tga_image_size;
unsigned int temp_tga_Data;
int i;
FILE *file = 0;
errno_t err;
if ((err = fopen_s(&file, filename, "rb")) != 0)
{
MessageBox(NULL, _T("Error open file TGA"), _T("Load TGA Error"), MB_OK);
return false;
}
//load tga header dari file tga,
if (fread(Load_tga_header, 1, sizeof(Load_tga_header), file) != sizeof(Load_tga_header))
{
MessageBox(NULL, _T("Error open file TGA"), _T("Fail to Read TGA Header"), MB_OK);
fclose(file);
return false;
}
//bandingkan header file TGA dengan standard TGA header
if (memcmp(standard_tga_header, Load_tga_header, sizeof(standard_tga_header)) != 0)
{
MessageBox(NULL, _T("Error open file TGA"), _T("Not TGA Format"), MB_OK);
fclose(file);
return false;
}
//load 6 bytes tga header (penting)
if (fread(tga_header_6bytes, 1, sizeof(tga_header_6bytes), file) != sizeof(tga_header_6bytes))
{
MessageBox(NULL, _T("Error open file TGA"), _T("Fail to Read 6 byte TGA Header"), MB_OK);
fclose(file);
return false;
}
tga_width = tga_header_6bytes[1] * 256 + tga_header_6bytes[0];
tga_height = tga_header_6bytes[3] * 256 + tga_header_6bytes[2];
if (tga_header_6bytes[4] != 32)
{
MessageBox(NULL, _T("Error open file TGA"), _T("data not 32 bit"), MB_OK);
fclose(file);
return false;
}
byte_per_pixel = tga_header_6bytes[4] / 8;
tga_image_size = tga_width * tga_height * byte_per_pixel;
tga_Data = (unsigned char *)malloc(tga_image_size);
if (tga_Data == NULL)
{
MessageBox(NULL, _T("Error open file TGA"), _T("Fail to allocate memory"), MB_OK);
fclose(file);
return false;
}
if (fread(tga_Data, 1, tga_image_size, file) != tga_image_size)
{
if (tga_Data != NULL)
free(tga_Data);
MessageBox(NULL, _T("Error open file TGA"), _T("Fail to Creat image data"), MB_OK);
fclose(file);
return false;
}
//rubah dari BGR ke RGB
for (i = 0; i < (int)tga_image_size; i += byte_per_pixel)
{
temp_tga_Data = tga_Data[i];
tga_Data[i] = tga_Data[i + 2];
tga_Data[i + 2] = temp_tga_Data;
}
//start to generate texture
glGenTextures(1, &TeksturID);
glBindTexture(GL_TEXTURE_2D, TeksturID);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tga_width, tga_height, GL_RGBA, GL_UNSIGNED_BYTE, tga_Data);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tga_width, tga_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, tga_Data);
fclose(file);
//clear unused memory
free(tga_Data);
//return tga_texture_ID;
return true;
}
Sampai Jumpa lagi di artikel berikutnya, maju terus pemrogramman tanah air.
Heriady
heriady.yoh@gmail.com
Download program tekstur TGA 32 bit tinggal Anda klik link ini, ngak usah repot-repot ngetik lagi capek.
Artikel terkait
Program tekstur bitmap 24 bit
Tidak ada komentar:
Posting Komentar