#0 

05-12-2010 22:06:31

kiricou974
Membre
Date d'inscription: 18-10-2010
Messages: 34

Bonjours voila j'ai enfin trouver un shader de glow.

seul probleme j'arrive pas a l'utiliser mais le shader et fonctionel et mon code aussi ...

voila le shader et ma fonction de callback

shader.frag

Code c++ :


uniform float strength;
uniform vec4 coronaDir;
uniform vec4 view_direction;
uniform sampler2D GlowTex;
uniform float coronaExp;
uniform vec4 lightColor;
uniform float constAtt;
uniform float sqrAtt;

// input variables from vertex Program.
varying vec2 vTexCoord;

float saturate( float inValue)
{
   return clamp( inValue, 0.0, 1.0);
}

void main(void)
{
   
   vec4 corona  = texture2D(GlowTex, vTexCoord);
   // view directoin is set up for the handedness, we need to flip it for ogl.
   vec3 vdir    = vec3(view_direction.x, view_direction.y, view_direction.z);
   vec3 cdir    = vec3(coronaDir.x, coronaDir.y, coronaDir.z);

   // Glow depending on cosine (dotprod) with "corona directon"
   float glow   = saturate(dot(vdir, cdir));

   gl_FragColor = strength * pow(glow, coronaExp) * corona * lightColor; 
}



shader.vert

Code c++ :


uniform vec4 pos0;         // location of screen aligned quad
uniform float coronaSize;  // size of screen aligned quad (currently 16.0)

// output variables for Fragment Program.
varying vec2 vTexCoord;

void main(void)
{
       
   // Grab X and Y eye-space vectors in world-space ...
   
   // NOTE: OpenGL stores matrixes as column major, DirectX stores then row major.
   //       So here, we need to extract the rows we need...the D3D version of this
   //       shader is a touch simplier.
   vec3 dirX = vec3(
                    gl_ModelViewMatrix[0][0],
                    gl_ModelViewMatrix[1][0],
                    gl_ModelViewMatrix[2][0]
                   );
   vec3 dirY = vec3(
                    gl_ModelViewMatrix[0][1],
                    gl_ModelViewMatrix[1][1],
                    gl_ModelViewMatrix[2][1]
                   );

   // ... which are used for billboarding
   vec3 pos    = vec3(pos0) + coronaSize * (gl_Vertex.x * dirX + gl_Vertex.y * dirY );
   
   gl_Position = gl_ModelViewProjectionMatrix * vec4(pos,1.0);
   
   vTexCoord   = 0.5 * gl_Vertex.xy + 0.5;

   
}



et ma function de callback

Code c++ :


class MyShaderCallBack : public video::IShaderConstantSetCallBack
{
    public :


        MyShaderCallBack ( IrrlichtDevice* _device )
        {
            device = _device;
        }


        virtual void OnSetConstants ( video::IMaterialRendererServices* services , s32 userData )
        {

                video::IVideoDriver* driver = services->getVideoDriver();

                float st = 20;
                services->setVertexShaderConstant("strength", (const float*)&st, 1);

                float st1 = 4;
                services->setVertexShaderConstant("coronaSize", (const float*)&st1, 1);

                // Set camera position
                core::vector3df pos = core::vector3df (-1,0,0);
                services->setVertexShaderConstant ( "coronaDir" , reinterpret_cast<f32*>( &pos ) , 3 );


                // Set camera position
                core::vector3df pos1 = device->getSceneManager()->getActiveCamera()->getPosition();
                services->setVertexShaderConstant ( "view_direction" , reinterpret_cast<f32*>( &pos1 ) , 3 );


                float st2 = 2;
                services->setVertexShaderConstant("coronaExp", (const float*)&st2, 1);


                float st3 = 1;
                services->setVertexShaderConstant("constAtt", (const float*)&st3, 1);

                float st4 = 1;
                services->setVertexShaderConstant("sqrAtt", (const float*)&st4, 1);

                // Set light color
                video::SColorf col(0.0f,255,255,0.0f);
                services->setVertexShaderConstant("lightColor", reinterpret_cast<f32*>(&col), 4);

                //Set pos to glow
                core::vector3df pos11 = core::vector3df (0,0,0);
                services->setVertexShaderConstant ( "pos0" , reinterpret_cast<f32*>( &pos11 ) , 3 );

                // set textures
                int a = 0;services->setPixelShaderConstant("GlowTex", (f32 *)(&a), 0);
        }

    private :

        IrrlichtDevice* device;
};



et il m'affiche seulement un carrer noir orienter selon la camera.

Merci de bien vouloir essayer le shader pour voir si il a un bug ou pas chez vous

Dernière modification par kiricou974 (05-12-2010 22:11:29)

Hors ligne


#1 

07-12-2010 15:46:33

TUpac
Habitué
Date d'inscription: 08-09-2009
Messages: 387
Corrections: 1

Avec grand plaisir mais j'ai pas trop le gout de compiler tu pourrais faire une vidéo ou nous filer un exe stp?


"Si vous ne partagez pas votre stabilité avec les pauvres, les pauvres partageront leur instabilité avec vous."

Hors ligne


#2 

07-12-2010 18:40:22

kiricou974
Membre
Date d'inscription: 18-10-2010
Messages: 34

ok attend se soir la j'ai pas le temps.

Hors ligne


#3 

08-12-2010 19:10:19

kiricou974
Membre
Date d'inscription: 18-10-2010
Messages: 34

En faite je crois que je vais lâcher se shader et passer a un shader CG mais problème comme faire pour l'utiliser avec irrlicht ?

Hors ligne


#4 

09-12-2010 16:42:47

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

forum officiel ...
http://irrlicht.sourceforge.net/phpBB2/ … ight=irrcg

perso le faite que se soit 'noir' ne veut pas forcement dire que ton code est mauvais mais plutot que tu essaye d'initialiser un type de shader qui n'est pas prit en charge par la carte graphique, je ne c'est pas se qu'il en est mais si tu utilise un shader 3.0 et que ta carte ne prend en charge que le 1.0 par exemple sa te feras ce probleme ... de même si tu initialise un shader hlsl sur un device opengl.

Hors ligne


#5 

09-12-2010 18:49:42

kiricou974
Membre
Date d'inscription: 18-10-2010
Messages: 34

ok mais comment on fait pour mettre a jour le shader ? enfin si c'est possible.

EDIT: J'arrive pas a compiler les exemples dans le dossier exemple irrCg.

Dernière modification par kiricou974 (09-12-2010 19:35:49)

Hors ligne


#6 

10-12-2010 19:34:24

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

on ne peut pas mettre a jour les shader, c'est lier directement au fabriquent de ta carte graphique !
dsl pour irrCg mais je ne l'utilise pas, et je n'est pas le temps de t'aider d'avantage pour ceci, a par pour des conseils je ne dispose pas d'asser de temps smile

Hors ligne


#7 

10-12-2010 19:58:20

kiricou974
Membre
Date d'inscription: 18-10-2010
Messages: 34

Ne t'inquiète pas je vais me débrouiller.

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
89 invités en ligne
Aucun membre connecté
RSS Feed