Pour autant que je sache, nous ne pouvons pas lire la valeur Z (profondeur) dans OpenGL ES 2.0. Alors je me demande comment on peut obtenir les coordonnées du monde 3D à partir d'un point sur l'écran 2D?OpenGL es 2.0 Buffer de profondeur de lecture
En fait, j'ai des pensées aléatoires qui pourraient fonctionner. Puisque nous pouvons lire la valeur RGBA en utilisant glReadPixels, que diriez-vous de dupliquer le tampon de profondeur et de le stocker dans un tampon de couleur (disons ColorforDepth). Bien sûr, il doit y avoir une bonne convention afin que nous ne perdions aucune information sur le tampon de profondeur. Et puis, quand nous avons besoin des coordonnées du monde d'un point, nous attachons ce tampon de couleur ColorforDepth au framebuffer, puis nous le restituons. Donc, quand nous utilisons glReadPixels pour lire les informations de profondeur à ce cadre. Cependant, cela conduira à 1 frame flash puisque le colorbuffer est un tampon bizarre traduit du buffer de profondeur. Je me demande toujours s'il existe un moyen standard pour obtenir la profondeur dans OpenGL es 2.0?
Thx à l'avance! :)
Tommy, pourriez-vous en dire un peu plus sur la division de gl_FragCoord.z entre les composants. Ne pas suivre. À votre santé. – dugla
@dugla Si la profondeur était un entier de 32 bits, vous ne pourriez en obtenir que 8 bits dans R, G, B et A. Donc, en pratique, ce que vous feriez serait quelque chose comme multiplier le vecteur '(1, 256 , 65536, 16777216) ', puis stocker chaque composant de ce vecteur mod 1.0 dans les canaux concernés. Vous pouvez recombiner plus tard en divisant par les composants pertinents et en ajoutant ensemble. – Tommy