#0 

08-07-2008 16:58:50

Chris
Petit nouveau
Date d'inscription: 08-07-2008
Messages: 5

Bonjour à tous,

Je suis débutant avec Irrlicht (et avec la 3D d'ailleurs) et j'aurais besoin de créer une bulle d'eau transparente.
Je tente un peu en vain d'essayer de rendre ça avec une simple sphère, une texture d'eau et un matériel EMT_TRANSPARENT mais le rendu est plus que mauvais.

Avez vous une idée de comment je dois m'y prendre pour avoir un rendu sympa ?

Hors ligne


#1 

08-07-2008 17:09:00

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

A mon avis si tu veut avoir un rendu sympa il faudra surement utilisé les shaders,
Si tu débute c'est pas le plus facile à utilisé

Si tu veut apprendre à crée des simples shaders tu peut commencer avec ça :
Tuto Shaders
et pour t'en servir avec irrlicht tu peut regarder le tuto 10 dans le sdk de irrlicht

Dernière modification par bestben (08-07-2008 17:14:10)

Hors ligne


#2 

08-07-2008 17:15:54

Chris
Petit nouveau
Date d'inscription: 08-07-2008
Messages: 5

J'ai regardé un peu le tutoriel sur les shaders. Programatiquement parlant ça ne m'a pas l'air inaccessible (j'ai de bonnes connaissances en développement classique (non 3D) )
Mais je ne comprend pas a quoi servent les fichiers "psh" et "vsh" et ce qu'ils contiennent ? (j'utilise D3D9)

Hors ligne


#3 

08-07-2008 17:20:39

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

Je pense que ce sont les pixel et vertex shader spéciaux de D3D
Edit: Eh bien non je me suis trompé les fichiers psh et vsh sont des shaders 1.0 (à moins que me trompe toujours) pour D3D9 c'est le fichier .hlsl

Dernière modification par bestben (08-07-2008 17:26:16)

Hors ligne


#4 

08-07-2008 17:23:56

Chris
Petit nouveau
Date d'inscription: 08-07-2008
Messages: 5

bestben :

Edit: Eh bien non je me suis trompé les fichiers psh et vsh sont des shaders 1.0 (à moins que me trompe toujours) pour D3D9 c'est le fichier .hlsl


Ah ! Et il faut se les créer ces fichiers ? :p

Dernière modification par Chris (08-07-2008 18:57:36)

Hors ligne


#5 

09-07-2008 16:52:57

bestben
Abonné
Date d'inscription: 20-10-2007
Messages: 133

Les shaders 1.0 sont les anciennes versions de shaders donc tu n'en à pas besoin à moins de les utiliser sur un ordinateur non-récent
Par contre si tu utilise les shaders avec D3D9 le language de programmation des shaders sera différent de OpenGL

Hors ligne


#6 

11-07-2008 14:38:42

Chris
Petit nouveau
Date d'inscription: 08-07-2008
Messages: 5

Je commence a comprendre. Mais j'ai encore besoin d'un peu d'aide. J'ai trouvé un shader D3D9 à cette adresse : http://www.devmaster.net/forums/showthread.php?t=4043
Simplement même avec le tutoriel irrlicht sur les shaders je ne m'en sort pas.
J'aimerai juste appliquer ce shader sur une sphère.

Quelqu'un pour m'expliquer comme faire ?
merci par avance smile

Hors ligne


#7 

16-07-2008 14:16:32

Chris
Petit nouveau
Date d'inscription: 08-07-2008
Messages: 5

Bon, après avoir fouillé un peu sur le forum de Irrlicht. J'ai trouvé le tutoriel sur la réfraction de "blindside" (http://irrlicht.sourceforge.net/phpBB2/ … hp?t=27054)

Ca correspond exactement à ce a quoi je souhaité arriver mais j'ai un autre problème.
Le shader est écrit en GLSL (opengl) et je travaille avec dx9.
Est ce que quelqu'un pourrait faire la conversion glsl --> hlsl pour moi ? Je n'y arriverai pas personnellement et j'en ai terriblement besoin.
Voici le code des vertex et pixel shader qui m'interresse.
Je remercie 1000 fois par avance celui qui pourra me réaliser cette traduction. smile

Code:

uniform sampler2D RTTexture;
uniform sampler2D NormalMap;
uniform vec4 TintColour;

varying vec4 GlassPos;
varying vec2 TexCoord;
varying float VAlpha;

void main()
{
    vec4 projCoord = GlassPos / GlassPos.w;
    projCoord += vec4(1.0);
    projCoord *= 0.5;
    vec2 norTex = TexCoord.xy;

    vec4 NorMap = texture2D(NormalMap,norTex);
    vec3 Normal = NorMap.xyz;
    
    vec2 TexOff = Normal.xy * 2.0;
    TexOff -= vec2(1.0,1.0); 
    
    projCoord.xy += ((TexOff.xy - vec2(0.5,0.5)) / 25.0);
    projCoord.xy = clamp(projCoord.xy, 0.001, 0.999);
    
    vec4 refTex = texture2D(RTTexture,projCoord.xy);
    
    gl_FragColor = refTex * TintColour;
    gl_FragColor.a = NorMap.a * VAlpha;
}

Code:

uniform mat4 mWorld;
uniform vec4 CamPos;
uniform float TexMul, AlphaAdjust;
varying vec4 GlassPos;
varying vec2 TexCoord;
varying float VAlpha;

void main()
{
    VAlpha = gl_Color.a * AlphaAdjust;

    TexCoord = gl_MultiTexCoord0.xy;
    GlassPos = ftransform();
    
    gl_Position = GlassPos;
}

Hors ligne


#8 

17-07-2008 23:16:19

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

Est ce que quelqu'un pourrait faire la conversion glsl --> hlsl pour moi ? Je n'y arriverai pas personnellement et j'en ai terriblement besoin.


Il ne faut pas exagérer, la syntaxe des deux est très proche (héritée du C), les types sont grosso modo les mêmes, les fonctions aussi...

Y'a un adage qui commence par "aide-toi toi même..." : je suis sur que si tu rencontres des problèmes dans la conversion il y aura des âmes charitables connaissant l'HLSL pour t'aider, mais encore faut-il que tu te donnes la peine d'essayer !

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
Analysé par
880 membres
1424 sujets
11113 messages
Dernier membre inscrit: mandrifidy
22 invités en ligne
Aucun membre connecté
RSS Feed