Edit: Problème résolu, voir le message #7 pour la solution
--------------------------------------
Salut à tous.
Je cherche à modifier l'opacité de triangles que je dessine manuellement dans le video driver.
Je pensais qu'il suffisait de modifier les paramètres de mon materiau et notamment DiffuseColor mais visiblement ça ne prend pas en compte la composante alpha.
J'ai aussi essayé de modifier la couleur de chaque vertex mais là aussi l'alpha est ignoré.
Quelqu'un aurait une idée ?
Dernière modification par Metallizer (27-04-2012 17:50:56)
Hors ligne
tu peut passer par un shader:
ou T0 est une texture et densiter est la trasparence...
sinon je ne c'est pas je ne me suis jamais pencher sur la question, en tout cas j'est étudier les api graphique et ce n'est pas disponible en realtime sans séparer les objects au rendue
si j'ai bien comprit se que tu cherchais, sinon tu peut jouer avec l'alpha de la texture enfin ....
Dernière modification par Magun (02-02-2011 18:02:19)
Hors ligne
Ah oué carrément un shader... j'aurais aimé m'en passer pour un truc aussi bête. Et en plus, j'ai un petit soucis, j'ai déjà affecté un type de matériau à mon objet :
Si je change pour un shader, je vais perdre la couche alpha de ma texture...
Bref cette histoire n'est pas simple. J'ai vu sur des forums que certains intervenaient directement sur la texture mais c'est assez bof parce que ça signifie que si on veut appliquer une opacité différente à chaque node mais que ces nodes ont la même texture, ils sont tous concernés par l'opacité...
Je continue mes recherches de mon côté, n'hésitez pas si vous avez d'autres idées ^^
Hors ligne
non tu ne perd pas la couche alpha
Hors ligne
Ah oui d'accord, c'est vrai que j'avais oublié qu'on passait un MaterialType qui sert de base.
Je vais voir pour le shader mais sinon, j'avais une autre piste, à toi de me dire si c'est faisable : combiner deux MaterialType. Comme tu l'as vu, j'applique un video::EMT_TRANSPARENT_ALPHA_CHANNEL pour que ma texture conserve sa transparence. Est-ce qu'il est possible de combiner avec un video::EMT_TRANSPARENT_VERTEX_ALPHA ? J'ai pu rendre mon node semi transparent en modifiant la composante Alpha de chaque vertex.
Apparemment il est possible de créer des MaterialType personnalisés (IMaterialRenderer) mais jusqu'à présent, je ne suis tombé que sur des solutions qui mettent en pratique du DirectX. J'aimerais que mon jeu reste compatible OpenGL...
Dernière modification par Metallizer (03-02-2011 13:44:19)
Hors ligne
Edit: Ce méthode n'a pas été retenue, voir le message #7 pour la solution
--------------------------------------
Bon finalement j'ai opté pour le shader et ça marche nickel, merci pour ton aide
J'ai défini une structure qui permet de lister les shaders disponibles qu'on peut appliquer à des nodes :
Les membres de cette structure sont définis en début de programme :
J'ai également défini un Callback pour ce shader :
J'applique le shader au node :
Le vertex shader :
// Récupération de la couleur diffuse du matériau du node uniform vec4 vColor; void main(void) { gl_FrontColor = vColor; gl_Position = ftransform(); gl_TexCoord[0] = gl_MultiTexCoord0; }
Le pixel shader :
uniform sampler2D T0; void main(void) { vec4 col = texture2D(T0, gl_TexCoord[0].st); gl_FragColor = col * gl_Color; }
Dernière modification par Metallizer (27-04-2012 17:50:20)
Hors ligne
super alors, désoler si je n'est pue te répondre ... coupure d'internet ....
bref, je te propose de faire un topic dans Routine sur le forum, histoire que les nouveaux sans inspire
Hors ligne
Je reviens sur ce topic 1 an après car j'ai trouvé une solution au problème initial et qui n'utilise aucun shader !
Donc le truc c'est de pouvoir agir sur l'opacité d'un node qui utilise une texture avec canal alpha.
La solution m'a été donnée par un des admins qui s'occupent du moteur :
Le matériau à utiliser est EMT_ONETEXTURE_BLEND
Dernière modification par Metallizer (27-04-2012 17:47:56)
Hors ligne
intéressant merci pour l'info
Hors ligne