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

OpenGL Discussion :

Transformer un point sprite en sphere


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut Transformer un point sprite en sphere
    Bonjour,

    C'est mon premier post ici. Le forum semble bien, et comme je n'ai pas obtenu de réponse à ma question sur les forums anglais, je vais vous poser ma question.

    Je désire transformer un point sprite en sphere en utilisant des shaders et des textures. Présentement j'ai ces deux textures :



    Vous comprendrez que je veux etre en mesure de tourner autour du point sprite et d'avoir l'impression qu'il s'agit bien d'une sphere, donc la texture doit varier avec la lumière en tournant autour de la sphere.

    J'ai été en mesure d'utiliser la texture (seulement 1 texture) et de l'appliquer au point sprite. Le rendu est bien, mais en tournant autour de la sphere, la texture est toujours la meme, ce qui diminue l'effet de 3D.

    Est-ce qu'il y a quelqu'un avec une solution? Merci.

  2. #2
    Membre éclairé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    La deuxième image ressemble à une boule de de cristal, non?


    Tu as une illustration de ce qui "diminue l'effet de 3D"?
    Tu peux faire du multi-texturing et du Shading avec du "point-sprite"? Si oui, essaie de faire un peu de Bump-mapping pour améliorer les reflets sur la surface des sphères...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut
    Citation Envoyé par TNT89 Voir le message
    La deuxième image ressemble à une boule de de cristal, non?


    Tu as une illustration de ce qui "diminue l'effet de 3D"?
    Tu peux faire du multi-texturing et du Shading avec du "point-sprite"? Si oui, essaie de faire un peu de Bump-mapping pour améliorer les reflets sur la surface des sphères...
    Ca diminue l'effet de 3D dans le sens ou, lorsqu'on tourne autour de la sphere, on regarde toujours la meme texture, ce qui n'est pas logique. En réalité, si on tourne autour d'une sphère qui est éclairé, elle ne sera pas éclairer identiquement de tous les cotés.

    Je sais qu'il est possible de faire du shading et du texturing avec les point-sprite. Beaucoup de gens semble utiliser cette technique pour leur engin de particules. J'ai seulement été incapable de trouver des examples de code démontrant comment faire cela. J'ai donc aucune idée de comment implenter le tout. J'ai les textures, et je dois utiliser la deuxième image de depth pour faire l'illusion de 3D je crois. Mais encore la, j'aimerais bien que quelqu'un approuve le tout!

  4. #4
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    il faut que dans ton shader tu recréé l'illumination de la sphère, donc récréer une géométrie virtuelle de ta sphère, càd, avoir le centre, le rayon, et calculer une normale de la sphère au pixel que tu es en train de traiter dans le shader.

    utiliser tes 2 textures ne servira à rien, vu que sur la première on a les tâches spéculaires qui dépendent d'où tu te trouves par rapport à la lumière.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut
    Citation Envoyé par stardeath Voir le message
    il faut que dans ton shader tu recréé l'illumination de la sphère, donc récréer une géométrie virtuelle de ta sphère, càd, avoir le centre, le rayon, et calculer une normale de la sphère au pixel que tu es en train de traiter dans le shader.

    utiliser tes 2 textures ne servira à rien, vu que sur la première on a les tâches spéculaires qui dépendent d'où tu te trouves par rapport à la lumière.
    Exact. Maintenant, comment je peux recréer une géométrie virtuelle de sphere à partir du point sprite? Je voulais utiliser les textures, car certaine personne m'ont dit que ca serait plus rapide. Le code ci-dessous fonctionne, mais il n'affiche qu'une géométrie 2D. Je ne veux pas que mon point sprite demeure en 2D, il faut que la sphere soit 3D. Dans le code du fragment shader, l'image 2D de la sphere fait toujours face à l'utilisateur, je ne sais pas comment changer cela! AIDE!!!
    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
     
    uniform float pointRadius;  // point size in world space  
    uniform vec3 lightDir = vec3(0.577, 0.577, 0.577);
    varying vec3 posEye;        // position of center in eye space
    void main()  
    {      
    	//const vec3 lightDir = vec3(0.577, 0.577, 0.577);
    	const float shininess = 50.0; 
    	// calculate normal from texture coordinates
    	vec3 N;      
    	N.xy = gl_TexCoord[0].xy*vec2(2.0, -2.0) + vec2(-1.0, 1.0);
    	float mag = dot(N.xy, N.xy);      
    	if (mag > 1.0) discard;   // kill pixels outside circle      
    	N.z = sqrt(1.0-mag);
    	// point on surface of sphere in eye space      
    	vec3 spherePosEye = posEye + N*pointRadius;
    	// calculate lighting      
    	float diffuse = max(0.0, dot(lightDir, N));
    	//    gl_FragColor = gl_Color * diffuse;
    	vec3 v = normalize(-spherePosEye);      
    	vec3 h = normalize(lightDir + v);      
    	float specular = pow(max(0.0, dot(N, h)), shininess);
    	gl_FragColor = gl_Color * diffuse + specular;  
    }  
    );

  6. #6
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    hum, il te faut l'équation d'une sphère qui est x²+y²+z²=r²

    donc à partir de la coordonnées de texture tu reconstruit le z, ce qui va te donner les coordonnées du point sur une sphère unité (rayon 1).

    ensuite il va te falloir le centre de ta sphère, la taille de ta sphère et les coordonnées que l'on a calculées juste avant, avec tout ça, tu calcules un vrai vecteur normal (comment sur un vrai maillage de sphère) et tu peux finalement faire le calcul d'illumination comme si tu avais une sphère alors que tu n'as qu'un billboard.

    je n'ai pas le temps de faire du code ce matin (cette nuit), mais si tu bloques, je regarderai ça ce soir.

Discussions similaires

  1. transformer les points en virgules
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 19h35
  2. rectangulation: transformer amas points 2d en rectangles
    Par acx01b dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 09/04/2007, 01h13
  3. problème avec les point sprites
    Par conrad dans le forum DirectX
    Réponses: 2
    Dernier message: 14/07/2005, 18h44
  4. transformation de point
    Par clettebou dans le forum OpenGL
    Réponses: 1
    Dernier message: 14/04/2005, 10h11
  5. particules animées avec point sprites ?
    Par ilimo dans le forum DirectX
    Réponses: 3
    Dernier message: 10/09/2004, 23h12

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