Author Topic: [GLSL] Exemple basic d'une texture avec masque alpha  (Read 4994 times)

0 Members and 1 Guest are viewing this topic.

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
[GLSL] Exemple basic d'une texture avec masque alpha
« on: March 04, 2008, 06:04:17 PM »
Voila le code de base avec deux textures, la texture de base ( couleur ) plus une en niveau de gris qu'on va utiliser pour contrôler le canal alpha.

Notez qu'il faut absolument ajouter  opacity avec une valeur inférieure à 1.0 dans la déclaration du material pour que la transparence alpha soit prise en compte dans le shader ogsl

Évidemment, pour que le shader soit parfaitement exploitable dans un projet, faudrait aussi ajouter le calcul de la lumière, mais c'est pas le but de l'exemple si présent  :roll:

J'ai ajouté des couleurs pour mieux suivre la démarche.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<demoniak3d>

<scene name="Demo Alpha Mask"  display_fps="TRUE" vsync="TRUE" show_ref_grid="FALSE" display_hyperion_logo="TRUE" > <infos
      title="opacity mask"
      author="www.Steph3D.net"
      description="mini tut" />
   <window_size width="1024" height="768" />
   <global_ambient_light r="0.1" g="0.1" b="0.1" a="1.0" />
   <background_color r="0.2" g="0.3" b="0.3" />
   <check_hardware_caps glsl="TRUE" />
</scene>

<camera name="Main_Camera" navigation_mode="FLY" display_position="FALSE" display_view_direction="FALSE" >
   <position x="-4.60" y="92.95" z="395.69" />
   <lookat x="0.01" y="-0.18" z="-0.98" w="0.0" />
</camera>

<mesh name="mesh_plane" shape_type="PLANE" lighting="FALSE" texturing="TRUE" polygon_mode="SOLID" use_vbo="TRUE" >
   <plane x_size="400.0" z_size="400.0" num_segs_x="10" num_segs_z="10" />
   <attach_material name="Mat01" />
   
   <texture material_name="Mat01" texture_name="txt1" texture_unit="0" />
   <texture material_name="Mat01" texture_name="txt2" texture_unit="1" />

   
   <position x="0.0" y="0.0" z="0.0" />
   <orientation pitch="90.0" />
</mesh>


<material name="Mat01" shader_program_name="Shader01" opacity="0.0" />

<texture name="txt1" filename="GFX/GPUcolor.jpg" filtering_mode="TRUE" />
<texture name="txt2" filename="GFX/GPUmask.jpg" filtering_mode="TRUE" />


<shader_program name="Shader01"  >
   <constant_1i name="Color" value="0" />
   <constant_1i name="Mask" value="1" />   
   <raw_data><![CDATA[   

      [Vertex_Shader]

      void main()
      {   
         gl_TexCoord[0] = gl_MultiTexCoord0; // UVW des couleur sur le canal 0
         gl_TexCoord[1] = gl_MultiTexCoord1; // UVW du mask sur le canal 1
         gl_Position = ftransform();      
      }
      [Pixel_Shader]
      
      uniform sampler2D Color; // déclaration de la map de couleur
      uniform sampler2D Mask; // déclaration de la map mask
      
      void main (void)
      {
         gl_FragColor = texture2D( Color, gl_TexCoord[0].xy); // texture de couleur
         gl_FragColor.a = texture2D( Mask, gl_TexCoord[1].xy); // texture pour l'alpha mask
      }

         ]]></raw_data>

</shader_program>

</demoniak3d>
« Last Edit: March 04, 2008, 06:10:50 PM by Steph3D »

shadow

  • Capo Regime
  • ***
  • Posts: 353
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #1 on: March 04, 2008, 08:40:10 PM »
Merci !
Je me ferais bien quelques feuilles d'arbres avec ça, moi...  :oui:
3D, photos panoramiques : http://www.shadows.fr

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #2 on: March 04, 2008, 09:10:30 PM »
J'ai pas réusis à poster le fichier joint :roll: j'ai mis la demo avec le logo d'exemple sur mon site http://forum.steph3d.net/index.php/topic,350.0.html

zseb

  • Soldier
  • **
  • Posts: 86
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #3 on: March 04, 2008, 09:19:35 PM »
Évidemment, pour que le shader soit parfaitement exploitable dans un projet, faudrait aussi ajouter le calcul de la lumière, mais c'est pas le but de l'exemple si présent  :roll:
nikel ce petit tuto bien joué steph  :med: par contre quand tu parle reglage lumiere, ce n'est que pour l'estetique ca marche avec n'impote quel type de lumiere ?

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #4 on: March 04, 2008, 09:54:25 PM »
Sur un shader GLSL, la lumière et le fog d'origine ne fonctionnent pas, c'est toi qui dois tout gérer dans ton code pour dir à ton shader comment les pixels doivent agir sur ton objet. Plus compliqué, mais tellement puissant  8)

Mais bon, pour les lights et le fog, les tuts sont déjà sur le site, au pire tu ajoutes en partie en copier-coller si tu ne comprends pas bien au début, ça vient lentement ;)

Je trouve que quand on fait un tut sur une fonction précise, il ne faut mettre que l'essentiel, jamais le reste, sinon quand on ne connaît pas, c'est trop dur à suivre avec 10x plus de code, c'est à force de comprendre pleins de petits bout de codes tres simple, qu'au final on arrive à assembler son propre code complexe ;)

zseb

  • Soldier
  • **
  • Posts: 86
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #5 on: March 04, 2008, 10:04:35 PM »
pour sur ^^

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2343
    • oZone3D.Net
Re: [GLSL] Exemple basic d'une texture avec masque alpha
« Reply #6 on: March 08, 2008, 10:30:35 AM »
Notez qu'il faut absolument ajouter  opacity avec une valeur inférieure à 1.0 dans la déclaration du material pour que la transparence alpha soit prise en compte dans le shader ogsl
Non tu n'est pas obligé de mettre une valeur inférieure à 1. Tu peux laisser opacity=1 et activer à la main le blending des couleurs. Tu obtiendras la meme chose.

Sinon bien ce petit tuto. Tu as montré le bon exemple  :thumbup: