Author Topic: Prob avec un shader  (Read 5767 times)

0 Members and 1 Guest are viewing this topic.

FF.Fan

  • Associate
  • Posts: 2
Prob avec un shader
« on: February 14, 2009, 11:11:07 AM »
Bonjour,

Voilà je débute en GLSL, j'essaye d'adapter un shader simple de rendermonkey (PLastic.rfx) dans demoniak3d. Je pense que mon code est bon, cependant j'obtient une couleur uniforme bizarre qui ne change pas même si j'éteins la lumière de la scène  :mefiant:
Qu'est-ce que j'ai mal fait ?
Voici le code de ma scène :
Code: [Select]
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<hyperion version="1.0">

<!--
+++++++++++++++++++++++++++++++++++++++[ SCENE ]
-->
<scene name="hypergraph_02" show_ref_grid="TRUE" display_fps="TRUE" >
<check_hardware_caps oglsl="TRUE"
                     error_message="Sorry, this demo requires OpenGL Shading Language support. Demo startup failed. Bye..." />
    <background_image image="03_textures/adrift.jpg" />
<window_size width="1024" height="768" />
</scene>


<!--
+++++++++++++++++++++++++++++++++++++++[ CAMERA ]
-->
<camera name="myCamera" navigation_mode="EXAMINE" mouse_move_speed="0.15"> 
<position x="0.0" y="100.0" z="300.0" /> 
<orientation pitch="30.0" yaw="-45.0" /> 
</camera> 


<!--
+++++++++++++++++++++++++++++++++++++++[ LIGHT ]
-->
<light name="light_01" type="OMNI" render="TRUE" >
<position x="0.0" y="1000.0" z="1000.0" />
<ambient r="0.2" g="0.2" b="0.2" a="1.0" />
<diffuse r="1.0" g="1.0" b="1.0" a="1.0" />
<specular r="1.0" g="1.0" b="1.0" a="1.0" />
</light>

<!--
====== MATERIAL =================================================================
-->

<material name="Carrosserie" shader_program_name="CarPaintShader" preset="CHROME">
<ambient r="0.2" g="0.2" b="0.2" />
<diffuse r="0.9" g="0.9" b="0.9" />
<specular r="0.9" g="0.9" b="0.9"/>

</material>

<!--
+++++++++++++++++++++++++++++++++++++++[ MODEL ]
-->
<model name="myModel" filename="Viper_RT10.3ds" lighting="TRUE" auto_spin="FALSE" texturing="TRUE" >
<scale
x="10"
y="10"
z="10" />
<spin_values y="10.0" />
</model>


<!--
====== VERTEX/PIXEL SHADER PROGRAM ===========================================
-->
<shader_program name="CarPaintShader" >

<constant_4f
name="color"
x="102.0"
y="189.0"
z="0.0"
w="0.0" />


<raw_data><![CDATA[
[Vertex_Shader]

uniform vec4 view_position;

varying vec3 vNormal;
varying vec3 vViewVec;

void main(void)
{
   gl_Position = ftransform();

   // World-space lighting
   vNormal = gl_Normal;
   vViewVec = view_position.xyz - gl_Vertex.xyz;

   
}

[Pixel_Shader]
uniform vec4 color;

varying vec3 vNormal;
varying vec3 vViewVec;

void main(void)
{
   float v = 0.5 * (1.0 + dot(normalize(vViewVec), vNormal));
   gl_FragColor = v * color;

}

]]></raw_data>

</shader_program>

</hyperion>

Voici une image :


Le shader semble bien présent mais il s'affiche mal :( (ma carte supporte les shader j'ai testé les codes sample ...)

Merci pour votre aide.
« Last Edit: February 14, 2009, 11:36:22 AM by FF.Fan »

FF.Fan

  • Associate
  • Posts: 2
Re: Prob avec un shader
« Reply #1 on: February 14, 2009, 02:49:18 PM »
J'ai testé avec un autre shader qui m'affiche les normal sur le model et ca marche nikel mais le shader d'avant il veut pas je comprends pas, help plz !

Code: [Select]
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

<hyperion version="1.0">

<!--
+++++++++++++++++++++++++++++++++++++++[ SCENE ]
-->
<scene name="hypergraph_02" show_ref_grid="TRUE" display_fps="TRUE" >
<check_hardware_caps oglsl="TRUE"
                     error_message="Sorry, this demo requires OpenGL Shading Language support. Demo startup failed. Bye..." />
    <background_image image="03_textures/adrift.jpg" />
<window_size width="1024" height="768" />
</scene>


<!--
+++++++++++++++++++++++++++++++++++++++[ CAMERA ]
-->
<camera name="myCamera" navigation_mode="EXAMINE" mouse_move_speed="0.15"> 
<position x="0.0" y="100.0" z="300.0" /> 
<orientation pitch="30.0" yaw="-45.0" /> 
</camera> 


<!--
+++++++++++++++++++++++++++++++++++++++[ LIGHT ]
-->
<light name="light_01" type="OMNI" render="TRUE" >
<position x="0.0" y="1000.0" z="1000.0" />
<ambient r="0.2" g="0.2" b="0.2" a="1.0" />
<diffuse r="1.0" g="1.0" b="1.0" a="1.0" />
<specular r="1.0" g="1.0" b="1.0" a="1.0" />
</light>

<!--
====== MATERIAL =================================================================
-->

<material name="Carrosserie" shader_program_name="CarPaintShader" >
<ambient r="0.2" g="0.2" b="0.2" />
<diffuse r="0.9" g="0.9" b="0.9" />
<specular r="0.9" g="0.9" b="0.9"/>

</material>

<!--
+++++++++++++++++++++++++++++++++++++++[ MODEL ]
-->
<model name="myModel" filename="Viper_RT10.3ds" lighting="TRUE" auto_spin="FALSE" texturing="TRUE" >
<scale
x="10"
y="10"
z="10" />
<position x="0" y="30" z="0"/>
<spin_values y="10.0" />
</model>

<!--
====== VERTEX/PIXEL SHADER PROGRAM ===========================================
-->
<shader_program name="CarPaintShader" >

<constant_1f name="gamma" x="1" />


<raw_data><![CDATA[
[Vertex_Shader]

varying vec3 vNormal;
void main(void)
{
   gl_Position = ftransform();
   vNormal = gl_NormalMatrix * gl_Normal;
}

[Pixel_Shader]
varying vec3 vNormal;

uniform float gamma;

vec3 map( in vec3 s );

void main(void)
{
   vec3 color = map( normalize( vNormal ) );
   color = pow ( color, vec3( 1.0/gamma ) );
   gl_FragColor = vec4( color, 1.0 );
}

vec3 map( in vec3 s )
{
   vec3 result = s * 0.5 + 0.5;
   return result;
}

]]></raw_data>

</shader_program>

</hyperion>

Steph3D

  • Capo Regime
  • ***
  • Posts: 399
Re: Prob avec un shader
« Reply #2 on: February 14, 2009, 06:02:37 PM »
Hello, c'est un shader basic qui affiche du jaune vert, donc le résultat semble pas si faux que ça ;-)

Essaye sans scaler ton objet, juste en cas ou, car en général le scaling demande une renormalisations des normale de l'objet ( je sais pas comment il est gérer dans DEM en XML), mais si les normals sont faussé, ça peu sursaturé comme ici.

Pour la lampe, ben je vois pas pourquoi ça changerai quelque que chose que tu l'allume ou pas, tu peu même la virer la, vus que tu n'a pas gérer le calcul de l'éclairage dans ton shader

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
Re: Prob avec un shader
« Reply #3 on: February 15, 2009, 06:57:46 PM »
Hello FF.Fan,

deux choses qui peuvent t'aider à solutionner ton problème:

1 - les composantes de la couleur doivent etre comprises entre 0 et 1. Donc ton vecteur color devrait avoir la tete suivante:
Code: [Select]
<constant_4f
name="color"
x="0.4"
y="0.74"
z="0.0"
w="0.0" />

2 - la var uniform view_position doit etre mise à jour à chaque frame car elle contient la position de la camera. Utilise un peu de LUA pour cette mise à jour (HYP_Camera.GetPosition + HYP_GPUShader.SetConstant_4f).

J'ai fait un petit test de mon coté et j'obtiens un beau vert et donc les nuances varient avec la pos de la cam.