J'essaye d'implémenter PCF pour une carte de cube d'ombre dans OpenGL 2.0. Je pensais avoir trouvé une solution here (chercher Percentage closer filtering (PCF) algorithm
pour trouver le début de la section sur la carte du cube PCF), mais le code se base sur le samplerCubeShadow
qui n'est pas disponible dans OpenGL 2.0 donc je ne peux pas utiliser l'appel à texture(samplerCubeShadow(), vec4())
montré sur cette page.Cubemap PCF: Obtenir le plan perpendiculaire à un vecteur à un point donné
La première partie de cette question est: Existe-t-il un moyen de récupérer les mêmes résultats à partir d'un samplerCube
dans OpenGL 2.0/GLSL 1.10? En utilisant un textureCube
ou autre chose?
La deuxième partie concerne une idée que je dois résoudre ce problème. L'image ci-dessous illustre ce que j'aimerais faire.
La ligne bleue et les lignes rouges en pointillés sont tous les vecteurs provenant d'une face de la samplerCube
qui stocke mes valeurs de profondeur. L'intersection de la ligne bleue avec le carré gris foncé au centre des carrés noirs représente le point échantillonné du cube. Je voudrais créer un plan (représenté par le rectangle gris clair) qui est perpendiculaire au vecteur bleu. Ensuite, je voudrais échantillonner les 4 points noirs de la caméra en lançant des vecteurs Z de la position de la lumière (ce sont les lignes rouges en pointillés) à leurs valeurs x, Y sur ce plan. Ensuite, j'utiliserais ces valeurs combinées avec les valeurs de l'échantillon original pour calculer la valeur d'ombre du PCF.
Est-ce une manière viable et efficace de calculer PCF pour un pointlight/cubemap? Et comment pourrais-je créer le plan parallèle et ensuite récupérer les coordonnées X et Y dont j'ai besoin?