Rumbah
2006-09-13, 17:54:39
Ich hoffe, jemand kann mir helfen.
Ich möchte im Shader Daten verarbeiten, und dafür möchte ich die Ausgangsdaten in einer Textur speichern, dann im Shader auslesen und am Ende berechnungen damit durchführen. Nur funktioniert das bei mir nicht so richtig, und ich weiß nicht warum. Also, meine Testtextur ist:
GLfloat testtext1[] = {
1.f, 1.f, 1.f,
0.f, 0.f, 3.f,};
Dann mach ich:
glGenTextures( 1, &texId1);
glBindTexture( GL_TEXTURE_1D, texId1);
glTexParameteri( GL_TEXTURE_1D, GL_GENERATE_MIPMAP, GL_FALSE);
glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage1D( GL_TEXTURE_1D, 0, GL_RGB_FLOAT32_ATI, 2, 0, GL_RGB, GL_FLOAT, testtext1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, texId1);
Nach dem Linken dann:
texLoc[0] = glGetUniformLocation(shaderProg, "texture1");
glUniform1i(texLoc[0], 0);
Der Shader enthält dann:
uniform sampler1D texture1;
vec3 n1, n2, v1[3], v2[3];
float p1[3], p2[3], d1[3], d2[3], t1b, t1e, t2b, t2e, tempFloat;
void main()
{
vec4 temp = gl_FragCoord;
for (int i = 0; i<3; i++)
{
v1[i] = vec3( texture1D(texture1, 0.3 ) );
v2[i] = vec3( texture1D(texture1, 0.7 ) );
}
if ( v1[1] == vec3(1.,1.,1.))
{
gl_FragColor = vec4( 0., 0., 1., 1.);
}
else
{
gl_FragColor = vec4( 1., 0., 0., 1.);
}
}
Die vielen Variablen sind für spätere Sachen gedacht, die ich gleich mit reingepackt habe.
Nun aber mein Problem:
So, wie es oben angegeben ist, wird alles blau, weil das Textursample an der Stelle 0.3 (1., 1., 1.) ist. So sollte es ja auch sein. Aber das Textursample an der Stelle 0.7 (also in v2[1]) ist nicht (0., 0., 3.), denn ewnn ich die If Abfrage durch
if ( v2[1] == vec3(0.,0.,3.))
ersetze, ist alles rot, also war die Abfrage negativ.Und ich habe keine Ahnung warum. Ist die Textur falsch erzeugt?
Rumbah
Ich möchte im Shader Daten verarbeiten, und dafür möchte ich die Ausgangsdaten in einer Textur speichern, dann im Shader auslesen und am Ende berechnungen damit durchführen. Nur funktioniert das bei mir nicht so richtig, und ich weiß nicht warum. Also, meine Testtextur ist:
GLfloat testtext1[] = {
1.f, 1.f, 1.f,
0.f, 0.f, 3.f,};
Dann mach ich:
glGenTextures( 1, &texId1);
glBindTexture( GL_TEXTURE_1D, texId1);
glTexParameteri( GL_TEXTURE_1D, GL_GENERATE_MIPMAP, GL_FALSE);
glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri( GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage1D( GL_TEXTURE_1D, 0, GL_RGB_FLOAT32_ATI, 2, 0, GL_RGB, GL_FLOAT, testtext1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, texId1);
Nach dem Linken dann:
texLoc[0] = glGetUniformLocation(shaderProg, "texture1");
glUniform1i(texLoc[0], 0);
Der Shader enthält dann:
uniform sampler1D texture1;
vec3 n1, n2, v1[3], v2[3];
float p1[3], p2[3], d1[3], d2[3], t1b, t1e, t2b, t2e, tempFloat;
void main()
{
vec4 temp = gl_FragCoord;
for (int i = 0; i<3; i++)
{
v1[i] = vec3( texture1D(texture1, 0.3 ) );
v2[i] = vec3( texture1D(texture1, 0.7 ) );
}
if ( v1[1] == vec3(1.,1.,1.))
{
gl_FragColor = vec4( 0., 0., 1., 1.);
}
else
{
gl_FragColor = vec4( 1., 0., 0., 1.);
}
}
Die vielen Variablen sind für spätere Sachen gedacht, die ich gleich mit reingepackt habe.
Nun aber mein Problem:
So, wie es oben angegeben ist, wird alles blau, weil das Textursample an der Stelle 0.3 (1., 1., 1.) ist. So sollte es ja auch sein. Aber das Textursample an der Stelle 0.7 (also in v2[1]) ist nicht (0., 0., 3.), denn ewnn ich die If Abfrage durch
if ( v2[1] == vec3(0.,0.,3.))
ersetze, ist alles rot, also war die Abfrage negativ.Und ich habe keine Ahnung warum. Ist die Textur falsch erzeugt?
Rumbah