Bonjour,

j'essaie de simuler la réfraction de verres de lunettes en utilisant la combinaison cube map + shaders telle qu'elle est décrite dans l' "Orange book" (et un peu partout ailleurs sur le net).

Mon application utilise un arrière plan "fixe", quelle que soit la position de la caméra. J'utilise pour ce plan la texture "NegativeZ" de mon cube map. Les 5 autres textures de mon cube map sont utilisées pour les réflections / refractions, mais jamais directement visibles.

Afin de tester, je remplace mes verres par de simples Quads dans le plan (XY) (la direction de vue est -Z). Dans un premier temps pas de réfraction, je veux juste simuler une transparence comme on pourrait le faire en utilisant le blending (pour cela, dans mon shader, j'utilise le vecteur incident à la place du vecteur refracté pour effectuer le lookup dans le cube map). Je fais ca pour m'assurer que mon cube map est bien "configuré" avant de rajouter la vraie réfraction. Mais déjà là je rencontre des problèmes

- 1) Si mon quad est centré en (0,0,-50) (la caméra étant en (0,0,0), la pseudo-refraction est correcte quelle que soit la taille du quad (image 1)

- 2) Si je place 2 quads à peu près à la position de mes verres, c'est à dire excentrés, j'observe des erreurs (image 2).

Je pense que, pour avoir un rendu correct, il me faudrait calculer deux cube map différents, chacun pris depuis le verre correspondant. Cependant j'aimerais utiliser un cube map statique, pas le calculer dynamiquement vu que de toute facon mon arriere-plan reste fixe.

J'ai essayé d'ajouter un vecteur aux vecteurs réflechis et réfractés, pour tenir compte de la position de départ du rayon (qui sinon part toujours du centre du cube) mais ca ne marche pas correctement.

Mes questions:
- Est-il avant tout possible d'atteindre le résultat que je souhaite en utilisant un seul cube map pour les différents objets de ma scène?
- Y a-t-il peut-être une autre manière plus simple d'y arriver (autre que le ray-tracing dans un premier temps) ?

Un autre problème:
- dans le cas 1), c'est ok tant que le quad reste perpendiculaire à ma direction de vue. Dès qu'il se met à tourner le résultat est incorrect: vu que j'ai une réfraction nulle, je devrais pouvoir observer l'arriere plan tel quel, quelle que soit l'orientation de mon quad (ma vitre si vous préférez)....à la place j'ai ce que l'on voit dans l'image 3...des idées?

Merci d'avance, en espérant que c'est assez clair....