Bonjour a tous !
Voila quelques jours qu'avec un camarade de dev nous planchons sur un moteur a la Alone in the dark 4 (décors en 3D préca, persos en 3D, gestion dynamique des lumières), et nous bloquons bêtement sur la gestion des lumières.
Sur le papier, le principe est simple: nous avons a chaque fois 2 version d'un même décor, une version sombre et une version illuminée. On intègre a notre scène 3D très simplifiée un spot, qui va se projeter dans cette dernière afin d'obtenir un masque en dégradé de gris, ayant pour but de savoir quelles parties de la pièce sont éclairées.
Là les choses se gâtent. Jusqu'ici pas de problème, tout marche a merveille. Nous nous retrouvons donc avec nos deux images préca, et notre buffer qui contient un masque noir et blanc.
L'idée est d'afficher la première image (sombre), puis d'utiliser le masque pour afficher par dessus une version découpée de la seconde image.
Voila maintenant plusieurs heures que nous cherchons désespérément un moyen de faire ça, sans succès. Nous torturons dans tous les sens la methode glBlendFunc(), mais rien n'y fait, aucun résultat correct jusqu'ici.
En bref, nous avons besoin de reproduire le principe tout bête d'un masque de fusion. Actuellement, quand on fusionne la seconde image et le masque via glBlendFunc(), on obtiens bien notre découpage, mais sur fond noir, pas sur fond transparent.
Le code utilisé est le suivant:
Si quelqu'un a la solution a notre problème, par pitié, qu'il fasse signe !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #CODE RUBY image1.draw(0, 0, 640, 480) glEnable(GL_BLEND) mask.draw(0, 0, 640, 480) glBlendFunc(GL_DST_ALPHA, GL_ZERO) image2.draw(0, 0, 640, 480) glDisable(GL_BLEND)
Merci d'avance
Partager