Salut les gens cela devrait être une tâche facile, mais pour une raison quelconque, je ne comprends pas élaboré ...profondeur de rendu en HLSL
Je veux juste obtenir une visualisation de la profondeur dans ma scène à l'aide d'un shader :
float4x4 matViewProjection;
float4x4 matWorld;
float4 eyePos;
struct VS_OUTPUT
{
float4 position : POSITION0;
float depth : TEXCOORD0;
};
VS_OUTPUT vs_main(VS_INPUT input)
{
VS_OUTPUT output;
output.position = mul(input.position, matViewProjection);
float3 posWorld = mul(input.position, matWorld);
output.depth = distance(posWorld, eyePos);
return(output);
}
Pour obtenir la valeur de profondeur (ce que je pensais) je calcule la distance entre la position dans l'espace mondial et la position de la vue.
Et le pixel shader correspondant
float4 ps_main(VS_OUTPUT input) : COLOR0
{
float depth = input.depth;
return float4(depth, depth, depth, 1.0f);
}
qui se traduit rien d'autre qu'une couleur blanche
Alors j'ai commencé essai & erreur multipliant une valeur à la profondeur:
float depth = input.depth * 0.005f;
qui donne une satisfaction résultat en fonction de la distance à l'objet. Donc, si je me rapproche de l'objet, je vais devoir ajuster à nouveau la valeur.
theres quelque chose de très mal ...
Merci pour la lecture!
Oui ... Je n'ai pas oublié de normaliser la valeur, mais j'ai utilisé la fonction normalize() pour cela et j'ai juste obtenu une couleur grise ... Je n'ai pas pensé à utiliser la division homogène - merci pour ce rappel !!! – SideEffect
gardez à l'esprit que le type de normalisation dont je parle est très différent d'une normalisation vectorielle. – Goz