Lesen Sie 32-Bit-RGBA-Float-Werte in GLSL
-
20-09-2019 - |
Frage
Ich versuche, 32 Bit -Float -Daten an einen Shader zu senden, aber die Ergebnisse sind unberechenbar. Wenn ich mit vollem Weiß (1,1,1,1) teste, sind die Werte alle Null. Dies ist mein Code zum Erstellen der Textur:
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA32F_ARB, 512, 512, 0, GL.GL_RGBA, GL.GL_FLOAT, data);
und daraus in GLSL lesen:
uniform sampler2D u_tex1;
varying vec2 v_uv;
void main()
{
gl_FragColor = texture2D(u_tex1, v_uv);
}
Wenn ich die Textur auf zufällige Werte festlegt, wird etwas angezeigt, aber nicht korrekt. Ist dies die richtige Art, aus einer RGBA32F -Textur zu lesen, oder fehlt mir etwas?
Lösung
Sie geben nicht viele Informationen zu den Dingen, die Sie getan haben. Der Code, den Sie zeigen, ist jedoch korrekt.
Einige Dinge, die ich mir vorstellen kann, kann falsch sein:
- dein
data
hat nicht die richtigen Daten in (gibt es dort Schwimmkörper?) - Ihre Textur wird nicht ordnungsgemäß gefiltert (da Sie nur 1 MIP -Level bereitstellen, Sie brauchen Mipmapping deaktivieren)
- Ihre Textur ist nicht an die Textureinheit für den Sampler gebunden
u_tex1
(Sie können also nicht davon abrufen). - Ihre Texturkoordinaten sind nicht das, was Sie denken, und je nach Klemm-/Verpackungsmodus kann dies zu einem Texel führen, das nicht weiß ist. Verwenden
GL_CLAMP_TO_EDGE
oderGL_REPEAT
nicht mit dem Texturrand zu interagieren)
Es gibt viele Möglichkeiten, keine Texturarbeiten zu haben. Ich hoffe, ich habe den richtigen in dieser Liste geklappt!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow