instinct
2009-11-25, 23:49:35
Ich habe gerade ein kleines Problem, welches womöglich durch die Länge meines bisherigen Tages bedingt ist. :redface:
Ich hoffe ihr könnte mir helfen. Folgendes ist ein einfaches Testszenario:
Meine Applikation erzeugt eine 2D-Textur mit vier bytes. Diese wird per als uniform-Variable an den Shader übergeben:
unsigned char data[] = {255,255,255,0};
texIds = (GLuint *)malloc(sizeof(GLuint));
glGenTextures(numTextures, texIds);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texIds[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 2, 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
...
In meinem Shader wil ich nun lediglich den letzten Wert (0) auslesen und als Farbwert für ein Objekt setzen.
gl_FragColor = texture2D(volume_data, vec2(1.0,1.0));
Ich greife in die Textur mit (1.0,1.0) und müsste doch einen vec4(0.0) bekommen. Stattdessen ist mein Objekt weiss (wegen dem GL_REPEAT). Benutz ich GL_CLAMP_TO_EDGE wirds dunkel grau (was wegen GL_NEAREST nicht sein dürfte).
Kann mir jemand sagen, was ich falsch mache?
Ich hoffe ihr könnte mir helfen. Folgendes ist ein einfaches Testszenario:
Meine Applikation erzeugt eine 2D-Textur mit vier bytes. Diese wird per als uniform-Variable an den Shader übergeben:
unsigned char data[] = {255,255,255,0};
texIds = (GLuint *)malloc(sizeof(GLuint));
glGenTextures(numTextures, texIds);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texIds[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 2, 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
...
In meinem Shader wil ich nun lediglich den letzten Wert (0) auslesen und als Farbwert für ein Objekt setzen.
gl_FragColor = texture2D(volume_data, vec2(1.0,1.0));
Ich greife in die Textur mit (1.0,1.0) und müsste doch einen vec4(0.0) bekommen. Stattdessen ist mein Objekt weiss (wegen dem GL_REPEAT). Benutz ich GL_CLAMP_TO_EDGE wirds dunkel grau (was wegen GL_NEAREST nicht sein dürfte).
Kann mir jemand sagen, was ich falsch mache?