Author Topic: question sur le Bump Mapping avec le GLSL  (Read 4194 times)

0 Members and 1 Guest are viewing this topic.

John Difool

  • Thug
  • *
  • Posts: 48
    • KoKon3D
question sur le Bump Mapping avec le GLSL
« on: September 25, 2006, 09:03:59 AM »
Salut!!!

Suite à tes conseils, j'aimerai appliquer du Bump Mapping en GLSL sur mon modele.3ds, mais le shader ne fonctionne pas, mon modele devient tout noir.

Lors de mes tests, j'ai utilisé le tutorial :"Bump Mapping avec le GLSL ", et j'ai juste changé le mesh sphere par mon modele et mon sub_mesh,ainsi que la texture.
je suis sûr du nom de mon materiau. Donc, y a t'il quelque chose à modifier dans le shader?

Code: [Select]
<material name="6" shader_program_name="bumpMappingShader">
<ambient_reflection_factor r="0.3" g="0.3" b="0.3" a="1.0" />
<diffuse_reflection_factor r="0.8" g="0.8" b="0.8" a="1.0" />
<specular_reflection_factor r="05.5" g="05.5" b="05.5" a="1.0" />

</material>



<!--
_______________________________________[ TEXTURE ]
-->
<texture name="terre_tex" filename="tile1.tga" pixel_format="RGBA" addressing_mode="MIRROR" filtering_mode="TRILINEAR" num_mipmaps="6" anisotropy="8.0"/>


<texture name="terre bump_tex" filename="tile1DOT3.tga" addressing_mode="MIRROR" filtering_mode="TRILINEAR" num_mipmaps="6" anisotropy="8.0"/>


<!--
_______________________________________[ MODEL ]
-->



<model name="sol" filename="sol1.3ds"
       load_texture="FALSE" render="TRUE" texturing="TRUE" lighting="TRUE" use_vbo="TRUE"
camera_collision_entity="MESH" camera_collision="FALSE" polygon_mode="SOLID" >


</model>

<!--
_______________________________________[ MESH ]
-->
<mesh name="Plan01" parent_name="sol" shape_type="MODEL_SUB_MESH" render="TRUE"
      lighting="TRUE" texturing="TRUE" remove_seam="TRUE">

<attach_material name="6" />

<texture material_name="6"
             texture_name="terre bump_tex"
             u_tile="30.0" v_tile="30.0"
 u_move="0.0"
             texture_unit="1"
             texture_type="COLOR_MAP" />

<texture material_name="6"
             texture_name="terre_tex"
 u_tile="30.0" v_tile="30.0"
 u_move="0.0"
             texture_unit="0"
             texture_type="COLOR_MAP" />
             


</mesh>



<shader_program name="bumpMappingShader"  >
<constant_1i name="colorMap" value="0" />
<constant_1i name="normalMap" value="1" />

<vertex_attrib name="vTangent" value="1" />
<constant_1f name="invRadius" value="0.001" />

<raw_data><![CDATA[
[Vertex_Shader]

varying vec3 lightVec;
varying vec3 eyeVec;
varying vec2 texCoord;
attribute vec3 vTangent;
                   

void main(void)
{
gl_Position = ftransform();
texCoord = gl_MultiTexCoord0.xy;

vec3 n = normalize(gl_NormalMatrix * gl_Normal);
vec3 t = normalize(gl_NormalMatrix * vTangent);
vec3 b = cross(n, t);

  vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);
vec3 tmpVec = gl_LightSource[0].position.xyz - vVertex;

lightVec.x = dot(tmpVec, t);
lightVec.y = dot(tmpVec, b);
lightVec.z = dot(tmpVec, n);

tmpVec = -vVertex;
eyeVec.x = dot(tmpVec, t);
eyeVec.y = dot(tmpVec, b);
eyeVec.z = dot(tmpVec, n);
}

[Pixel_Shader]

varying vec3 lightVec;
varying vec3 eyeVec;
varying vec2 texCoord;
uniform sampler2D colorMap;
uniform sampler2D normalMap;

uniform float invRadius;

void main (void)
{
float distSqr = dot(lightVec, lightVec);
float att = clamp(1.0 - invRadius * sqrt(distSqr), 0.0, 1.0);
vec3 lVec = lightVec * inversesqrt(distSqr);

vec3 vVec = normalize(eyeVec);

vec4 base = texture2D(colorMap, texCoord);
vec3 bump = normalize(texture2D(normalMap, texCoord).xyz * 2.0 - 1.0);

vec4 vAmbient = gl_LightSource[0].ambient * gl_FrontMaterial.ambient;

float diffuse = max( dot(lVec, bump), 0.0 );
vec4 vDiffuse = gl_LightSource[0].diffuse * gl_FrontMaterial.diffuse * diffuse;

float specular = pow(clamp(dot(reflect(-lVec, bump), vVec), 0.0, 1.0), gl_FrontMaterial.shininess );
vec4 vSpecular = gl_LightSource[0].specular * gl_FrontMaterial.specular *specular;

gl_FragColor = (vAmbient*base + vDiffuse*base + vSpecular) * att;


}


    ]]></raw_data>


</shader_program>


Merci de prendre du temps à répondre à mes nombreuses questions, c'est vraiment sympat!!!  :D

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
question sur le Bump Mapping avec le GLSL
« Reply #1 on: September 28, 2006, 04:21:32 PM »
Ajoute le code suivant dans le node model:

Code: [Select]

<model ........ >

  <loading_option load_texture="TRUE"
           compute_vertices_normals="TRUE"
         compute_tangent_space_vectors="FALSE" >
</model>


afin d'initialiser le vecteur tangent pour tous les meshes du model. Le vecteur tangent est necessaire pour le shader de bump mapping.

John Difool

  • Thug
  • *
  • Posts: 48
    • KoKon3D
question sur le Bump Mapping avec le GLSL
« Reply #2 on: September 30, 2006, 04:33:32 PM »
Merci sa fonctionne!!! Juste un petite chose il faut mettre :
Code: [Select]
compute_tangent_space_vectors="TRUE"

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
question sur le Bump Mapping avec le GLSL
« Reply #3 on: October 02, 2006, 05:17:08 PM »
bien vu  :tu: