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?

War es hilfreich?

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 oder GL_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
scroll top