Tekstury w OpenGL

0

Proszę o pomoc:
Piszę grę w OpenGL na linuksie jako zaliczenie. Używam OpenGL i GLUTa. Potrzebuje wyświetlić obrazek BMP (wielki napis stworzony w programie graficznym), ale nie umiem napisać sobie do tego odpowiedniej klasy/funkcji, która to wczyta i wyświetli...

Szukałem już w necie i nic nie znalazłem... Gotowce z SDL, którego celowo zainstalowałem nie widzą bitmapy, a wszelakie gotowce z OpenGL są pod windowsa, się nie kompilują pod linuksem bo są zrobione w glaux-ie, którego linux nie posiada i mam już dość tego...

Nie chce instalować kolejnej biblioteki graficznej, nie wymagam cudów (sztywny rysunek w 2D), a jedynie zwykłej klasy do C++, która wczyta i wyświetli tam gdzie chce obrazek.

Pomóżcie i napiszcie mi coś takiego...

0

W tutorialu NeHe masz przykład jak obsłużyć teksturowanie.

0

Dawno nie pisałem w OGLu i SDL, ale w swojej starej gierce używałem takiego kodu:

GLuint load_texture(const char* file, bool create){
	GLuint texture[1];
	
	SDL_Surface* surface = IMG_Load(file);
	if(create) glGenTextures(1, &texture[0]);
	glPixelStorei(GL_UNPACK_ALIGNMENT,4);
	glBindTexture(GL_TEXTURE_2D, texture[0]);
	SDL_PixelFormat *format = surface->format;
	if (format->Amask){
		gluBuild2DMipmaps(GL_TEXTURE_2D, 4,
						  surface->w, surface->h, GL_RGBA,GL_UNSIGNED_BYTE, surface->pixels);
	}
	else{
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3,
						  surface->w, surface->h, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels);
	}
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
	SDL_FreeSurface(surface);
	printf("load %s on ID:%d\n", file, texture[0]);
	return texture[0];
}
0

unsigned int GLCAM_TEX;
unsigned int * pData;

glEnable(GL_TEXTURE_2D);
pData = new unsigned int [2562563];
glGenTextures(1, &GLCAM_TEX);
glBindTexture(GL_TEXTURE_2D, GLCAM_TEX);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, pData);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glDisable(GL_TEXTURE_2D);

nie musze tlumaczyc co wstawiamy do pData ale w sumie bede musial bo zalezy jak dane zczytujesz i ile bitow zczytujesz wtedy zmieniasz odpowiednio innaa ilosc bitow np z 3 na 4
i jeszcze mamy taka piekna funkcje

glTexImage2D(GL_TEXTURE_2D, 0, 3, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, pData);

GL_RGB mowi funkcji jak piksele sa tam ipakowane czyli odpowidnio RGB sa njeszcze mozliwosci GL_RGBA GL_BGR GL_BGRA itp. itd. GL_UNSIGNED_BYTE dlatego ze wstawiasz normalne warotsci z np. jakiejs bitmapy a nie wstawiasz floatow

chociaz jest tam gl_UNSIGNED__BYTE a pData jest unsigned int to i tak dziala lae lepiej zmienic pData na unsigned Byte jezeli w ogole takie cos istnieje

1 użytkowników online, w tym zalogowanych: 0, gości: 1