Soweit ich weiß, können wir nicht den Z (Tiefe) Wert in OpenGL ES 2.0 lesen. Also frage ich mich, wie wir die 3D-Welt Koordinaten von einem Punkt auf dem 2D-Bildschirm bekommen können?OpenGL es 2.0 Lesen Tiefe Puffer
Eigentlich habe ich einige zufällige Gedanken könnte funktionieren. Da wir den RGBA-Wert unter Verwendung von glReadPixels lesen können, können wir den Tiefenpuffer duplizieren und in einem Farbpuffer speichern (z. B. ColorforDepth). Natürlich muss es eine nette Konvention geben, damit wir keine Informationen über den Tiefenpuffer verlieren. Und wenn wir die Weltkoordinaten eines Punktes benötigen, fügen wir diesen ColorforDepth-Farbpuffer an den Framebuffer an und rendern ihn dann. Also, wenn wir glReadPixels verwenden, um die Tiefeninformation in diesem Frame zu lesen.
Allerdings wird dies zu 1 Frame-Flash führen, da der Farbpuffer ein seltsamer Puffer aus dem Tiefenpuffer übersetzt wird. Ich frage mich immer noch, ob es einen Standard Weg gibt, um die Tiefe in OpenGL es 2.0 zu bekommen?
Thx im Voraus! :)
Tommy, könnten Sie bitte etwas mehr über das Teilen von gl_FragCoord.z zwischen Komponenten sagen. Nicht folgend. Prost. – dugla
@dugla Wenn Tiefe eine 32-Bit-Ganzzahl wäre, könnten Sie nur 8-Bits davon in jedem von R, G, B und A machen. In der Praxis würden Sie also etwas tun, wie den Vektor zu multiplizieren (1, 256) , 65536, 16777216) ', dann speichere jede Komponente dieses Vektors mod 1.0 in den relevanten Kanälen. Sie können später rekombinieren, indem Sie sie durch die relevanten Komponenten dividieren und addieren. – Tommy