Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
845 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Open-Gl] Transparence (Débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Open-Gl] Transparence (Débutant)

n°628721
guybrush02
Posté le 02-02-2004 à 17:22:57  profilanswer
 

Bonjour,
 
Je débute en OpenGL (J'ai débuté ce dimanche) et j'ai un petit problème de transparence.
Le problème est le suivant :
 
Si on considère qu'un cube a été dessiné, et que chaque face est transparente d'environ 20%, si deux faces se superposent, il devrait être possible de voir au travers. Or, dans mon petit "programme", ce n'est pas représenté tel quel. Une face est bien transparente (on voit ce qu'il y a à l'intérieur) mais la superposition de deux faces n'est pas transparente, et il y a aussi quelques problèmes de profondeur (entre les faces, justement).
 
Voici la parcelle de code concernée :

Code :
  1. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  2. glColor4fv(transpa);
  3. glutSolidCube(8);


 
Si une âme charitable pouvait m'orienter ?
 
Le programme est (peut-être) disponible ici :
http://audio.lexpage.net/lexpage/perso/carre_3d.exe
 
Merci


---------------
Guybrush  
mood
Publicité
Posté le 02-02-2004 à 17:22:57  profilanswer
 

n°628722
chrisbk
-
Posté le 02-02-2004 à 17:24:15  profilanswer
 

ben les blemes de profondeurs sont communs avec la transpa, fo rendre tes faces en back to front
tu veux nous mettre un screenshot (plutot que l'exe) pour bien qu'on voye ?

n°628805
guybrush02
Posté le 02-02-2004 à 19:31:54  profilanswer
 

chrisbk a écrit :

ben les blemes de profondeurs sont communs avec la transpa, fo rendre tes faces en back to front
tu veux nous mettre un screenshot (plutot que l'exe) pour bien qu'on voye ?


 
Voici une image de l'exe :  
http://audio.lexpage.net/lexpage/perso/carre_3d.gif
 
On voit très nettement que la transparence n'est gérée que sur un seul niveau, et n'est même pas calculée "correctement".  
 
Dans le cas d'un cube en rotation, comment peut-on savoir à l'avance quelle sera la face la plus éloignée du point de vue ?


---------------
Guybrush  
n°628836
skelter
Posté le 02-02-2004 à 21:01:34  profilanswer
 

rajoute glAlphaFunc(GL_GREATER,alpha); ==> alpha est un reel compris entre 0 et 1 qui represente le coeffiscient d'opacité ou un truc comme ca (enfin ca laisse passer uniquement les alphas superieurs a ta variable aplha)

n°629018
guybrush02
Posté le 02-02-2004 à 22:28:33  profilanswer
 

Mmmh, j'ai "honte" de dire cela, sans artifice, mais "ça ne marche pas" a première vue...
Le comportement est totalement identique, quelque soit la valeur d'alpha dans glAlphaFunc.
 
N'y a t'il pas un éventuel paramètre à modifier ci-dessous ?
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
Merci


---------------
Guybrush  
n°629060
youdontcar​e
Posté le 02-02-2004 à 22:55:10  profilanswer
 

Si tu rends un cube, tu changes le culling pour afficher les faces cachées (en fait celle de derrière), puis les faces visibles (devant).
 
Pour plus complexe, du tri ou du 'depth peeling'.

n°629080
skelter
Posté le 02-02-2004 à 23:08:28  profilanswer
 

Guybrush02 ==> le test alpha est activer?
glEnable(GL_ALPAH_TEST);  

n°629257
LeGreg
Posté le 03-02-2004 à 07:19:09  profilanswer
 

Guybrush02 a écrit :


Dans le cas d'un cube en rotation, comment peut-on savoir à l'avance quelle sera la face la plus éloignée du point de vue ?


 
la réponse est inclue dans la question:
on ne peut pas savoir à l'avance puisque le cube est en rotation.
 
Laisse tomber glutSolidCube qui n'en a rien a faire du fait que tes faces soient transparentes
et trace tes faces de cube comme un homme (avec glVertex..).
 
Bien entendu  
1: tu fais le tri à la main de tes faces. Ce n'est pas franchement dur pour un cube. C'est non trivial parfois impossible pour un mesh quelconque mais ce n'est pas ton probleme.
2: tu le recalcules à chaque image (cf remarque initiale puisque ton cube est en rotation, l'ordre des faces changent à chaque image)
3: Pour ce qui est des balles qui trainent au milieu de ton cube, il faut faire attention de les tracer entre les faces du fond et les faces du devant. Bien entendu le nombre de faces du devant varie entre 1 et 3 suivant l'orientation.
 
A+
LeGreg

n°629910
guybrush02
Posté le 03-02-2004 à 17:05:36  profilanswer
 

Je vois.
Merci pour ces explications, je vais m'attacher à ce problème en tenant compte de vos remarques.
 
Une petite question qui n'a cependant rien à voir avec le sujet initial : Existe-t-il une fonction permettant d'effectuer une rotation sur un vecteur ?  
(Je voudrai pouvoir faire une rotation de la caméra, via la fonction glUlookat(). Et à part en utilisant une matrice de rotation et l'appliquer sur le vecteur définit par "visée-position", je n'ai pas trouvé de technique particulière.
La fonction glRotated() ne donne pas le résultat souhaité si je l'utilise sur glulookat() (si je push une matrice et que je fais les transformations, et que je mets glulookat() dedans, je me retrouve systématiquement en (0,0) lors de l'affichage. Et si j'applique la transformation sans passer par un pushmatrix, certains objets (alors qu'ils sont créés dans une matrice temporaire) sont transformés aussi)
 
Merci


---------------
Guybrush  
n°630026
skelter
Posté le 03-02-2004 à 18:48:15  profilanswer
 

glulookat definis un point de visé et non un vecteur, j'ai fait une classe permettant de gere la camera avec gklulookat avec comme mouvement possible ceux d'un quake like, donc je peut t'aider mais j'ai pas trop ciompris quel mouvement tu voulai faire(dis moi a quoi ca correspond dans un quake like) car utiliser glulookat est bien plus pratique que les transformation de la matrice de visualisation

mood
Publicité
Posté le 03-02-2004 à 18:48:15  profilanswer
 

n°630083
guybrush02
Posté le 03-02-2004 à 19:41:40  profilanswer
 

J'ai écris une fonction permettant d'effectuer une translation de la caméra (je modifie donc les paramètres de glulookat). Cette translation correspond aux pas latéraux, ainsi qu'a "avancer" et "reculer" dans un fps.
 
Je souhaiterai faire une fonction qui permet de modifier le point de visée en fonction de la souris (comme dans un fps donc).
 
Mathématiquement parlant, je sais définir l'angle, ajouter une valeur à l'angle et déterminer un nouveau vecteur, mais il doit y avoir une erreur quelque part, puisque ma "rotation" de vecteur de visée (le vecteur définit par la position courante et le point visé) n'est pas correct.
 
Je précise également que je ne mets pas le vecteur directement dans glUlookat, mais je mets la position de la caméra et la position du point visé (qui est la somme de la position de la caméra + le vecteur de visée).  
 
Je suis interéssé par ta classe, en espérant qu'elle soit commentée, afin de voir comment tu effectues les rotations dues au mouvement de la souris (dans un fps).
 
merci


---------------
Guybrush  
n°630138
skelter
Posté le 03-02-2004 à 20:41:13  profilanswer
 

je t'ai envoyer un message privé ;)


Message édité par skelter le 03-02-2004 à 20:41:41
n°630333
guybrush02
Posté le 03-02-2004 à 22:44:09  profilanswer
 

Merci.  
 
Je n'ai malheureusement pas su trouver réponse à ma question, étant donné que ta solution fonctionne dans un plan uniquement horizontal, et que je dois l'appliquer à un système en 3 dimensions (bien qu'on puisse simplifier le système en 2 plans à 2 dimensions linéairement indépendant)


---------------
Guybrush  

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Open-Gl] Transparence (Débutant)

 

Sujets relatifs
qui veut aider un debutant en php ; mon compteur marche pas(Débutant) taille tableau caractère
Question de débutant .... comment remplacer les ' ?Débutant : Compilation des sources d'une application
[VB] Probleme de debutanttransparence
[c++](débutant) comment faire un getter d'un tableau ?[Débutant inside] Choisir x et y en écrivant dans un Componant
[JS] - Débutant - Besoin d'aide pour un script ...Débutant en c++
Plus de sujets relatifs à : [Open-Gl] Transparence (Débutant)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR