PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL Textur einfügen


BodyLove
2009-01-19, 13:33:56
hi,

also ich habe eine Zeit lang versucht mit AuxDIBImageLoad() ein bmp in OGL zu laden um einen einfachen Würfel mit Textur zu versehen. Das lief nicht rund, weil ich mit VC++-Express 2008 char* nicht in LPCWSTR umwandeln konnte. Daher habe ich eine weitere Möglichkeit gesucht, um eine textur zu laden.

Code:


unsigned int LoadTex(string Image)
{
unsigned int Texture;

FILE* img = NULL;
img = fopen(Image.c_str(),"r");

unsigned long bWidth = 0;
unsigned long bHeight = 0;
DWORD size = 0;

fseek(img,18,SEEK_SET);
fread(&bWidth,4,1,img);
fread(&bHeight,4,1,img);
fseek(img,0,SEEK_END);
size = ftell(img) - 54;

unsigned char *data = (unsigned char*)malloc(size);

fseek(img,54,SEEK_SET); // image data
fread(data,size,1,img);

fclose(img);

glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bWidth, bHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);

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

if (data)
free(data);

return Texture;
}


Mein Problem ist jetzt der, dass er entweder das Image nicht einwandfrei hochlädt, oder ich noch die Ecken für das bmp setzen muss. Da ich aber die Glutmethode glutSolidCube(int); genutzt habe, weiß ich nicht, wie ich das mache.

Wenn ich den cube manuell gesetzt hätte, so wäre es ja einfach.


glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
// oben links an der Form und der Textur
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
// unten links an der Form und der Textur
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
// unten rechts an der Form und der Textur
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// oben rechts an der Form und der Textur


Aber das habe ich nicht. Es muss doch von Glut was geben, dass das Automatisch macht.

Für diejenigen, die es sich die Mühe machen wollen mir zu helfen, habe ich das File mal angehängt. Ich hoffe es gibt jemanden. Mein Prof hat da auch keine wirklichen Ideen. Er schickt mich nur auf die Tutorial von Nehe, der aber AuxDIBImageLoad() nutzt.


vielen dank.

Kant
2009-01-20, 02:32:49
Wenn ich mich recht entsinne setzt glutSolidCube tatsächlich keine Textur-Koordinaten und bietet auch keine Optionen dafür.
Du wirst also vermutlich nicht darum herum kommen den Cube manuell zu "bauen".