=> pada cpp
#include
#include
#include
#include
#include
#include "texture.h"
//FUNCTION LoadBitmap(char *)
//untuk meload bitmap file dan mengembalikan ke dalam openGL menunjuk ID untuk digunakan pada texture
int LoadBitmap(char *filename)
{
FILE * file;
char temp;
long i;
bitmapinfoheader infoheader;
if( (file = fopen(filename, "rb"))==NULL) return (-1); // membuka file untuk dibaca
fseek(file, 18, SEEK_CUR); // memulai membaca width dan height
fread(&infoheader.biWidth, sizeof(int), 1, file);
fread(&infoheader.biHeight, sizeof(int), 1, file);
fread(&infoheader.biPlanes, sizeof(short int), 1, file);
if (infoheader.biPlanes != 1) {
printf("Planes from %s is not 1: %u\n", filename, infoheader.biPlanes);
return 0;
}
// baca bpp
fread(&infoheader.biBitCount, sizeof(unsigned short int), 1, file);
if (infoheader.biBitCount != 24) {
printf("Bpp from %s is not 24: %d\n", filename, infoheader.biBitCount);
return 0;
}
fseek(file, 24, SEEK_CUR);
// baca data
infoheader.data = (char *) malloc(infoheader.biWidth * infoheader.biHeight * 3);
if (infoheader.data == NULL) {
printf("Error allocating memory for color-corrected image data\n");
return 0;
}
if ((i = fread(infoheader.data, infoheader.biWidth * infoheader.biHeight * 3, 1, file)) != 1) {
printf("Error reading image data from %s.\n", filename);
return 0;
}
for (i=0; i<(infoheader.biWidth * infoheader.biHeight * 3); i+=3) { // membalik semua warna. (bgr ke rgb) temp = infoheader.data[i]; infoheader.data[i] = infoheader.data[i+2]; infoheader.data[i+2] = temp; } fclose(file); // menutup file // mengikat id texture ditentukan dengan parameter 2D GLuint textureId; glGenTextures(1, &textureId); glBindTexture(GL_TEXTURE_2D,textureId); //glBindTexture(GL_TEXTURE_2D, 1); // definisikan texture 2D glTexImage2D(GL_TEXTURE_2D, 0, 3, infoheader.biWidth, infoheader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, infoheader.data); // membuat mipmaps 2D gluBuild2DMipmaps(GL_TEXTURE_2D, 3, infoheader.biWidth, infoheader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, infoheader.data); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);//GL_LINEAR_MIPMAP_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);//GL_LINEAR_MIPMAP_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); free(infoheader.data); // membebaskan memory yang kita gunakan untuk meload texture return (textureId); // mengembalikan texture sekarang } => pada header
#ifndef _TEXTURE
#define _TEXTURE
extern int LoadBitmap(char *filename);
typedef struct /**** Struktur info file BMP****/
{
unsigned int biSize; /* info ukuran header */
int biWidth; /* panjang gambar */
int biHeight; /* tinggi gambar */
unsigned short biPlanes; /* nomor dari warna bidang */
unsigned short biBitCount; /* nomor dari bits per pixel */
unsigned int biCompression; /* tipe kompresi yang digunakan */
unsigned int biSizeImage; /* ukuran data gambar */
int biXPelsPerMeter; /* X pixels per meter */
int biYPelsPerMeter; /* Y pixels per meter */
unsigned int biClrUsed; /* jumlah warna yang digunakan */
unsigned int biClrImportant; /* jumlah warna yang penting */
char *data;
} bitmapinfoheader;
#endif
silahkan comment dibawah kalau measih ada masalah.. Terima Kasih..
Read More...
.jpg)
.jpg)
