IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Shader ASM et projection


Sujet :

DirectX

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut Shader ASM et projection
    (Re) bonjour...

    Voila j'ai une île. Celle-ci est entourée d'eau (sic). Je souhaite modifier la transparence de mon eau en fonction de la profondeur.

    Au départ, j'ai (bêtement) pris la profondeur "classique" de l'eau (projection sur l'axe Y). Très bien c'est joli, mais pas réel du tout.

    Je veux maintenant prendre la profondeur de l'eau en tenant compte de la position de la caméra. Ainsi je connaitrais réellement la quantité d'eau traversée. Et je vais faire ça à travers un vertex shader (ouahh mon premier VS...). C'est ce qu'il y a de plus facile, non? (sans en avoir l'air, ceci est une vrai question)

    Voici le principe de mon shader qui est censé me projeter mes coordonnées sur le plan Y=WaterLevel avec ma caméra comme centre de projection:
    _ je pars des vertex de mon terrain
    _ je calcule le vecteur Camera->Terrain
    _ je calcule k = Camera->Eau.y / Camera->Terrain.y (je connais Eau.y qui est fixe (c'est la hauteur de ma mer))
    _ j'en déduis le vecteur Camera->Eau et donc le point Eau

    Malheureusement ... ça marche pas....

    En mode Retail, mon eau est légèrement au-dessus de mon terrain (mais pas à la bonne hauteur) et les positions ne sont pas bonnes
    En mode Debug, mon eau est à la bonne hauteur (Y), mais les positions (X et Z) ne sont pas bonnes...
    Sinon aucune erreur en mode Debug dans la console...

    Note : je soupçonne fortement le paramètres w de mes vertices d'être la cause de mes soucis, mais j'ai essayé de mettre celui-ci à 1 avant de le multiplier par la matrice World/View/Proj, sans résultat...

    voici le code de mon shader:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // INPUT:
    // v0 = position (3 floats)
    // c0 - c3 = transposed world/view/proj matrix
    // c4 = camera position
    // c5 = water-level in y
     
    // version instruction
    vs_2_0
     
    // declare registers
    dcl_position v0
     
    //Camera->Water  = k * Camera->Terrain
    //  with  k = (Water.y - Camera.y) / (Terrain.y - Camera.y)
    sub r0, v0, c4	//Vector Camera->Terrain
    rcp r1.x, r0.y	// =1/(Terrain.y - Camera.y)
    mov r1.y, c5.y
    sub r2.z, r1.y, c4.y	// =Water.y - Camera.y
    mul r3.x, r1.x, r2.z	//k
    mad r2, r0, r3.x, c4	//Eau
     
    // transform position into projection space
    dp4 oPos.x, r2, c0 
    dp4 oPos.y, r2, c1 
    dp4 oPos.z, r2, c2 
    dp4 oPos.w, r2, c3 
     
    // transfer terrain position to pixel shader
    mov oT0, v0
    Si vous trouvez une erreur dans mes calculs, merci.......
    Si vous connaissez une autre méthode pour obtenir ce que je veux , merci aussi.
    Si vous avez un exemple, un lien, etc... (même si c'est une tout autre méthode)

    [EDIT]: comment ça je ne peux pas mettre "..." dans mon titre...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Pour les personnes ayant lu mon autre poste, il s'agissais d'une autre méthode pour le rendu de l'eau qui consiste en ceci:
    1_ rendu de la partie submergée dans une texture
    2_ modification de la texture en fonction de la profondeur (PS et VS)
    3_ affichage de cette texture sur l'écran
    4_ affichage de la partie immergée

    Partie 1 et 2: OK
    Par contre quand j'affichais ma texture et la partie submergée de mon terrain, ma texture était déformée et ne collait pas avec le terrain (sauf si ma caméra se touvait à la vertical de mon terrain). Je soupçonnais fort une de mes matrice de projection d'être mauvaise (lors du rendu sur la texture). Si quelqu'un à un code ou un lien bien documenté sur cette méthode, je suis aussi preneur.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/04/2007, 18h28
  2. Réponses: 20
    Dernier message: 15/03/2007, 20h10
  3. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  4. Reboot en asm ou C++
    Par Juke dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 17/10/2002, 09h11
  5. [TP]code asm dans une procedure
    Par M.Dlb dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 17/08/2002, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo