Historique des modifications - Message

Message #11824

Sujet: Changer la coloration de la texture d'une skybox


Type Date Auteur Contenu
Dernière modification 19-06-2017 22:01:25 jonath313
Merci beaucoup pour tes conseil, j'ai réussi a faire mon premier shader et il fonctionne correctement. Pour la coloration du ciel j'en ais terminé, j'ai repris tous mes codes pour créer un module météo. J'ai appliqué mon shader aux nuages et je joue sur l'opacité pour les faire apparaitre c'est vraiment surper comme rendu.

En ce qui concerne le shader de l'eau j'ai fais quelques recherche de mon côté. Par rapport à ce que tu disais sur le fait que les "pass" soient "sélectives", dans la doc, j'ai trouvé ceci :

Code c++ :

 
enum E_SCENE_NODE_RENDER_PASS { 
  ESNRP_NONE = 0, 
  ESNRP_CAMERA = 1, 
  ESNRP_LIGHT = 2, 
  ESNRP_SKY_BOX = 4, 
  ESNRP_AUTOMATIC = 24,
  ESNRP_SOLID = 8, 
  ESNRP_TRANSPARENT = 16, 
  ESNRP_TRANSPARENT_EFFECT = 32, 
  ESNRP_SHADOW = 64 
}


Si j'ai bien compris, quand je fais smgr->drawall(), le rendu comprend toute cette liste de type de nodes.

Je peux alors récupérer le type de la "pass" de cette manière ?:

Code c++ :


E_SCENE_NODE_RENDER_PASS CurrentPass;

void CMapWater::OnAnimate(u32 timeMs)
{
          CurrentPass = SceneManager->getSceneNodeRenderPass();

          if((CurrentPass == ESNRP_SOLID ) || (CurrentPass == ESNRP_SKY_BOX ))
          {
             /// Code de la reflexion
          }
}


Je suis sur la bonne voie où à côté de la plaque ?

Je n'ai pas trop saisi ce que tu entends par : "Dans CMapWater tu setLightManager avant le smgr->drawAll et tu l'unset apres (nullptr)" :

Code c++ :


E_SCENE_NODE_RENDER_PASS CurrentPass;

void CMapWater::OnAnimate(u32 timeMs)
{
          CurrentPass = SceneManager->getSceneNodeRenderPass();

          if((CurrentPass == ESNRP_SOLID ) || (CurrentPass == ESNRP_SKY_BOX ))
          {
             /// ...
            SceneManager->setLightManager(???);
            SceneManager->drawAll();
            SceneManager->setLightManager(0);
            /// ...
          }
}

C'est cela dont tu parle ?

Quand j'utilise le debug je me rends compte que ma variable CurrentPass est toujours à ESNRP_NONE est-ce normal ? Du coups la réflexion est jamais appelée.
Je dois passer quoi en paramètre de setLightManager (ILightManager *lightManager) ?
Création du message 19-06-2017 18:48:07 jonath313
Merci beaucoup pour tes conseil, j'ai réussi a faire mon premier shader et il fonctionne correctement. Pour la coloration du ciel j'en ais terminé, j'ai repris tous mes codes pour créer un module météo. J'ai appliqué mon shader aux nuages et je joue sur l'opacité pour les faire apparaitre c'est vraiment surper comme rendu.

En ce qui concerne le shader de l'eau j'ai fais quelques recherche de mon côté. Par rapport à ce que tu disais sur le fait que les "pass" soient "sélectives", dans la doc, j'ai trouvé ceci :

Code c++ :

 
enum E_SCENE_NODE_RENDER_PASS { 
  ESNRP_NONE = 0, 
  ESNRP_CAMERA = 1, 
  ESNRP_LIGHT = 2, 
  ESNRP_SKY_BOX = 4, 
  ESNRP_AUTOMATIC = 24,
  ESNRP_SOLID = 8, 
  ESNRP_TRANSPARENT = 16, 
  ESNRP_TRANSPARENT_EFFECT = 32, 
  ESNRP_SHADOW = 64 
}


Si j'ai bien compris, quand je fais smgr->drawall(), le rendu comprend toute cette liste de type de nodes.

Je peux alors récupérer le type de la "pass" de cette manière ?:

Code c++ :


E_SCENE_NODE_RENDER_PASS CurrentPass;

void CMapWater::OnAnimate(u32 timeMs)
{
          CurrentPass = SceneManager->getSceneNodeRenderPass();

          if((CurrentPass == ESNRP_SOLID ) || (CurrentPass == ESNRP_SKY_BOX ))
          {
             /// Code de la reflexion
          }
}


Je suis sur la bonne voie où à côté de la plaque ?

Je n'ai pas trop saisi ce que tu entends par : "Dans CMapWater tu setLightManager avant le smgr->drawAll et tu l'unset apres (nullptr)" :

Code c++ :


E_SCENE_NODE_RENDER_PASS CurrentPass;

void CMapWater::OnAnimate(u32 timeMs)
{
          CurrentPass = SceneManager->getSceneNodeRenderPass();

          if((CurrentPass == ESNRP_SOLID ) || (CurrentPass == ESNRP_SKY_BOX ))
          {
             /// ...
            SceneManager->setLightManager(???);
            SceneManager->drawAll();
            SceneManager->setLightManager(0);
            /// ...
          }
}

C'est cela dont tu parle ?

Quand j'utilise le debug je me rends compte que ma variable CurrentPass est toujours à ESNRP_NONE est-ce normal ? Du coups la réflexion est jamais appelée.
Je dois passer quoi en paramètre de setLightManager (ILightManager *lightManager) ?

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
135 invités en ligne
membre en ligne: -
RSS Feed