#0 

10-07-2007 19:56:21

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Bonjour, j'ai un petit problème actuellement.

C'est le même que celui là :
http://irrlichtnetcp.sourceforge.net/ph … er+texture

Problème qui n'a pas été résolu.

J'ai un custom SceneNode qui est un nouveau moteur de terrain, et j'aimerai lui adjoindre une lightmap, puis après faire du texture splatting (ce qui justifie l'utilisation des shaders).

J'ai donc assigné les textures comme suit :

Code:

terrain.SetMaterialTexture(0, GraphMgr.Driver.GetTexture("Medias/texture.bmp"));
                terrain.SetMaterialTexture(1,GraphMgr.Driver.GetTexture("Medias/light.bmp"));

Tout va bien, les deux sont chargées, et si j'utilise MaterialType.Lightmap, tout marche comme il faut.

Seulement voilà, dans mon shader, les textures sont les mêmes :

Code:

uniform sampler2D Texture1;
uniform sampler2D Texture2;

void main(void)
{
    vec4 Color = texture2D(Texture1, vec2(gl_TexCoord[0]));
    vec4 LM = texture2D(Texture2, vec2(gl_TexCoord[0]));

    gl_FragColor = vec4(1.0,0.0,0.0,1.0) * LM;
}

Et dans ma callback :

Code:

// Textures
int tex1 = 0; GPU.SetPixelShaderConstant("Texture1", (float)tex1);
int tex2 = 1; GPU.SetPixelShaderConstant("Texture2", (float)tex2);
int tex3 = 2; GPU.SetPixelShaderConstant("Texture3", (float)tex3);
int tex4 = 3; GPU.SetPixelShaderConstant("Texture4", (float)tex4);

Le shader est bien utilisé, puisque le modèle devient rouge, mais LM contient la même texture que Color, à savoir Texture1...

Y'a t-il une solution ? hmm

Merci d'avance.

Hors ligne


#1 

10-07-2007 22:08:49

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

salut;

En EMT_SOLID les textures sont elles identiques ?
Sinon a refaire un system de terrain avec un shader pourquoi ne pas faire la lightmap par shader du coup tu te mets en matrial solid ( le standard )  et il n'y aura plus probleme .

Edit :

ton shader a l'air de refaire justement le lightmap donc tu n'as plus besoin du material lightmap de irrlicht ce' n'est plus utile .

Dernière modification par firnafin (10-07-2007 22:14:05)

Hors ligne


#2 

10-07-2007 22:15:27

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Lorsque j'utilise MaterialType.Solid, seule la première texture est utilisée, donc tout va bien.
De plus lorsque j'utilise MaterialType.Lightmap, ça fonctionne correctement, la seconde texture est prise en compte.

Le problème survient lorsque j'essaye d'utiliser la seconde texture (ou même les autres) dans le fragment shader : je me retrouve toujours avec la première.

Dans le cas de mon shader, j'ai obligatoirement besoin de gérer plusieurs textures (pour le texture splatting), donc dans tous les cas le problème reste entier.

Et un material ne peut pas à la fois être Solid et utiliser en shader, c'est l'un ou l'autre puisque les shaders sont considérés comme des MaterialType.

Hors ligne


#3 

10-07-2007 22:18:38

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

pourquoi alors tu parle de materialtype.lightmap ?
Bon sinon voila un astuce simple tu mets plusieur texture dans une seul :

| -----------------|------------------|
|                      |                       |
|                      |                       |
|                      |                       |
|                      |                       |
|                      |                       |
|------------------|------------------|

et apres ds le shader tu choisis sur laquelle tu travailles en faisant une simple translation de la 2 composante des coords

Hors ligne


#4 

10-07-2007 22:22:37

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Je précisais juste qu'en utilisant MaterialType.Lightmap, l'effet fonctionne correctement, la seconde texture est bien prise en compte.

Le problème c'est que ma seconde texture est remplacée par la première dans mon shader.

Et non, je ne peux pas faire tout mon terrain splatting avec 1 seule texture, c'est pas jouable : la texture finale serait immense et peu facilement maintenable.

Hors ligne


#5 

10-07-2007 22:35:31

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

il a un truc que je ne capte pas du tout , quand tu fais ton nouveau material avec 
gpu->addHighLevelShaderMaterialFromFiles tu y definis le material de "base" , tu peux choisir EMT_LIGHTMAP auquel cas le material a 2 couches de texture .

Hors ligne


#6 

10-07-2007 22:53:59

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Dans le cas de EMT_SOLID aussi.

Tu as, quoi qu'il arrive, 8 textures, et tu peux normalement les utiliser à loisir dans ton fragment shader.

Je viens de tester avec MaterialType.Lightmap comme material de base, et ça ne change rien.

Je ne sais pas si c'est un bug d'Irrlicht.NET CP, ou des dernières versions d'Irrlicht ou encore si il faut que je fasse quelque chose de spécial lors du rendu de mon SceneNode pour qu'il envoi au shader les autres textures...

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
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
21 invités en ligne
Aucun membre connecté
RSS Feed