Seite 1 von 1

glTexImage2D für Lightmaps

Verfasst: 13.05.2009, 11:20
von vrCAT
Hallo zusammen,
ich habe ein Problem damit meine Lightmap richtig zu berechnen. Nach einem kleinen Test sehe ich das meine Lightmap auf der Texture um eine Einheit in U und V Richtung verschoben ist. Habe euch mal ein Bild gemacht und den Code habe ich auch dazu gelegt hoffe ihr könnt mir helfen.

Code: Alles auswählen

static unsigned char data[8 * 8 * 3];
for (long i=0;i<8*8*3;i++) data[i] = 255;
data[0] = 0;data[1] = 0;data[2] = 0;

glGenTextures(1, &textures[0]);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

Code: Alles auswählen

glBindTexture(GL_TEXTURE_2D, textures[0]);
glBegin(GL_QUADS);    
glNormal3f( 0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
glEnd();
Hier noch das Bild was dabei raus kommt:
http://ul.to/ibq6zt

Jetzt verstehe ich nicht warum der Schwarze Luminanzwert nicht in der unteren rechten Ecke liegt sondern um eine Einheit verschobene ist.

Re: glTexImage2D für Lightmaps

Verfasst: 13.05.2009, 12:03
von Richard Schubert
Der Pixel ist nicht um eine Einheit verschoben, sondern um 0.5 pixel. Bei OpenGL wie auch D3D10+ hat jeder Pixel seine Texturkoordinate im Zentrum seiner Pixelfläche in der Gesamttextur. Jede Texturkoordinate, welche von diesem Zentrum des Pixels abweicht, interpoliert dann je nach Samplereinstellung. In deinem Fall wäre das dann Bilinear. Durch das UV-Wrapping entsteht dann dieser Effekt.

Re: glTexImage2D für Lightmaps

Verfasst: 13.05.2009, 12:51
von vrCAT
Super danke.