begin process at 2012 05 30 17:42:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

DirectX

 > 

SOS lignes horizontales eclairage par shader


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SOS lignes horizontales eclairage par shader

lundi 2 octobre 2006 à 14:56:22 | SOS lignes horizontales eclairage par shader

THEwarrior333

[C++ DirectX HLSL]

Bonjour a tous,

J'utilise les shaders (.fx) pour éclairer ma scène et curieusement apparaissent des lignes horizontales sur tous les objets. Impossible de m'en débarrasser. Le code étant trop long pour être mis sur le forum, je ne joins que le code HLSL, sachant que l'erreur pourrait venir d'ailleurs.

Screenshot:

[URL=http://img225.imageshack.us/my.php?image=screen01ud9.jpg][IMG]http://img225.imageshack.us/img225/1724/screen01ud9.th.jpg[/IMG][/URL]

et code:

float4x4 WorldViewProj : WORLDVIEWPROJECTION;
float4x4 World :WORLD;
float4  LPos;

struct VS_INPUT
{
 float3 Position : POSITION;
 float3 Normal : NORMAL;
 float2 texCoord : TEXCOORD0;

 float4 Color : COLOR0;
};

struct VS_OUTPUT
{
 float4 Position : POSITION;
 float2 texCoord : TEXCOORD0; // coordonnees de texture 2D

 float4 Color : COLOR0;
};

// VERTEX SHADER
VS_OUTPUT vs( VS_INPUT IN )
{
 VS_OUTPUT OUT = (VS_OUTPUT)0;
     
 float3 posWorld;
 float3 normal;
 float3 light;
 float lightIntensity;
 float3 lightColor;
 float4 color;

 posWorld = mul(IN.Position, World).xyz;   //get the vertex to world space
 normal = mul(IN.Normal, World).xyz;   //get the normal to world space
 light = normalize(LPos - posWorld);   //calculating the light direction
 lightIntensity = clamp(dot(normal, light), 0, 1);   //calculate the light intensity and clamp it to a range
 lightColor = float3(1.0f, 1.0f, 10.0f);   //set the light color
 color = float4(lightColor * lightIntensity, 1.0f);   //calculate the color of the vertex
 color.rgb += 0.2f;   //add an ambient color to the shader

 OUT.Position = mul(float4(IN.Position,1), WorldViewProj);
 OUT.texCoord = IN.texCoord;
 OUT.Color = clamp(color, 0, 1);   //set the color to the output color

 return OUT;
}

//technique simpletechnique
{
 pass Pass0
 {
  VertexShader = compile vs_2_0 vs();
 }
}

Quelqu'un a une idée de l'origine de ce probleme?

Un grand merci d'avance.

lundi 2 octobre 2006 à 14:59:36 | Re : SOS lignes horizontales eclairage par shader

THEwarrior333

Désolé, le lien marche pas, c'est celui la:

[ Lien ]

mardi 3 octobre 2006 à 00:59:54 | Re : SOS lignes horizontales eclairage par shader

Galmiza

Les lignes ont-elles l'air de faire partie des textures ou "bougent"-elles en fonction de l'orientation de la camera ?
Peux-tu mettre un lien vers un exe ?
Le problème se pose-t-il avec un shader de base ?
Ce type de problème est plutôt typique d'un pixel shader et pas d'un vertex shader, peux-tu donner le pixel shader utilisé ? (quand c'est le VS qui foire, on ne distingue plus rien du tout )
mardi 3 octobre 2006 à 13:46:24 | Re : SOS lignes horizontales eclairage par shader

THEwarrior333

Merci bcp pour ton aide

Les lignes n'apparaissent que sur les objets (sur les textures), varient en fonction de la position de la camera mais sont toujours horizontales.
Il n'y a pas de pixel shader, que du vertex shader (le code que j'ai mis est le .fx entier).

Un lien vers l'exe:

[ Lien ]

mardi 3 octobre 2006 à 14:22:32 | Re : SOS lignes horizontales eclairage par shader

THEwarrior333

Je viens de m'apercevoir que j'ai posté dans la rubrique C par erreur, si un admin pouvais le mettre dans la bonne rubrique (c++/directx)...

mardi 3 octobre 2006 à 15:41:45 | Re : SOS lignes horizontales eclairage par shader

Galmiza

Réponse acceptée !

Il y a le même problème chez moi (ATI Radeon 9700 Mobility 128 Mo).

Apparement en modifiant le fichier fx on peut éliminer les lignes.
Quoi qu'il en soit, le problème ne doit pas venir du fichier fx car un vertex shader modifie uniquement les propriétes des vertex (en plus de les projeter) et un pixel shader travaille à coup d'interpolation linéaire. Donc rien n'expliquerait des lignes horizontales.

Ici, c'est vraiment discontinu.
On dirait que la carte graphique met en blanc plusieurs pixels contigus après la phase de rasterization (une fois que les pixels du backbuffer à modifier pour la face calculée ont été trouvés)
[ Lien ]
C'est très bizarre....

Ou alors, le pixel shader lit une texture avec des coordonnées textures non initialisées et l'utilise pour l'affichage.

Mais apparement ton fx n'a pas l'air faux.

Strange...

mardi 3 octobre 2006 à 18:35:48 | Re : SOS lignes horizontales eclairage par shader

THEwarrior333


C'est bon ca marche!
merci bcp Galmiza de m'avoir orienté sur mon code plutot que sur le shader.
C'était en effet une erreur "débile" au niveau de l'affichage des meshes qui en gros faisait que chaque mesh était affiché deux fois avec des paramètres de shader différents. Je ne précise pas plus car cela n'a pas d'intéret.

mercredi 4 octobre 2006 à 16:33:13 | Re : SOS lignes horizontales eclairage par shader

Galmiza

Ah ok, c'est donc le z-buffer le coupable.
Quand deux pixels sont exactement au meme endroit, ce sont les erreurs d'arrondi (précision du z-buffer) qui rentrent en jeu...
C'est quand même toi qui as trouvé ;) @+


Cette discussion est classée dans : position, normal, color, float4, float3


Répondre à ce message

Sujets en rapport avec ce message

Récupérer la couleur d'un pixel à la position x,y de l'écran [ par atao ] quelqu' un sait il comment peut on récupérer la couleur d'un pixel à la position x,y de l'écranmerciatao. (vc++) menu popup [ par madVinz ] $@lµT, je cherche un faire un menu ki saffiche a la position du curseur, mé sans fenetre, qd on lance le prog, le menu saffiche direct la ou é le curs chercher la position d'un caractere [ par Johjo ] Bon, je cherche à obtenir la position d'une chaine de caractere dans une autre chaine de caractere.Mais les seuls fonctions que j'ai trouvé me renvoye Recuperer des données dans une char [ par Johjo ] JE voudrais savoir si il y a une fonction pour recuperer des données dans une chaine de caractere. Par exemple, j'ai "voiture", je voudrais recuperer SetTextColor(HDC,COLORREF); [ par Xs ] salut !j'ai un probleme avec cette fonction que j'ai rencontré par hasard : elle ne marche pas. Je la compile correctement mais il ny'a a aucun effet position d'un control [ par Xs ] salut !!comment on peut récuperer la position X,Y d'un objet et sa taille (longueur, largeur);j'entend en fait par objet, un bouton.merci Connaitre la position du curseur!!! [ par tormoj ] Salut tout le monde,je voudrais savoir comment on fait pour connaitre la position du curseur dans une EditBox?Et enfin comment on fait pour griser tou Utilisation concrete de setbkcolor [ par dread ] J'ai mis le code suivant dans WM_INITDIALOG: HDC hdc; COLORREF color; color = RGB(12,12,12); hdc = GetDC(hwnd); SetBkColor(hdc,co Position de la souris. [ par Colombus ] Bonjour, Dans un projet MFC j'ouvre un bitmap; Je voudrais par la suite, "uniquement" après clic sur un bouton pouvoir avec la souris cliquer sur un p Need advice [ par hotnicks ] Bonjour,je suis en train d'écrire un jeu de plateau, dans lequel les 'pions' sont appelés pièces. Je veux être capable de lister tous les coups légaux


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales