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

JavaScript Discussion :

WebGL : Position lumière


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Par défaut WebGL : Position lumière
    Bonjour à tous !

    J'espère ne pas avoir posté dans la mauvaise section, pour le WebGL je ne savais pas trop où aller...

    Tout d'abord, plus que du code, une page complète :
    http://www.wibimaster.com/3d

    Avec les sources, y a tout ^^

    Mon soucis :

    Comme vous pouvez le constater sur la page d'exemple, j'essaie de construire un "monde", en fonction de ce que l'utilisateur rentre comme données sur le tableau.
    Mais il suffit de se faire une petite map et de se ballader pour vite se rendre compte du soucis avec la lumière ; j'ai tout essayé, mais je n'ai pas réussi à placer des points (ou meme ne serait-ce qu'un seul point) lumineux qui ne bouge pas... Là, il suffit de faire demi tour, et hop, la lumière s'éteind (ça peut être sympa comme effet, mais alors là c'est vraiment pas celui escompté )

    Plus simplement, la question pourrait-être "comment ajouter un lampadaire dans mon monde ?"

    Le soucis vient, je pense, du fait que le webGL ne gère pas la caméra, et du coup, pour simuler le déplacement, on bouge le "monde" autour de la caméra ; du coup, ben les lumières et leurs directions, c'est un vrai bor**l...

    Si quelqu'un a les connaissances nécessaires pour m'aider, je l'en remercierais 100 fois !!


    Merci à ceux qui me liront

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Citation Envoyé par WibiMaster Voir le message
    Le soucis vient, je pense, du fait que le webGL ne gère pas la caméra, et du coup, pour simuler le déplacement, on bouge le "monde" autour de la caméra
    Attention WebGL n’est absolument pas un moteur 3D c’est juste une API.

    J’ai rapidement survolé ton code source et j’ai vu que tu as modifié un ou plusieurs tutoriaux. A mon avis ce n’est pas une bonne approche, les tutoriaux ont pour but de faire l'apprentissage d’une fonctionnalité, le code source est donc réduit à cette fonctionnalité et n’est donc pas très évolutif.
    Tu devrais plutôt utiliser un vrais moteur 3D comme O3D ou Three.js !

    Sinon je pense que ton problème vient de ton Vertex Shader :
    Code GLSL : Sélectionner tout - Visualiser dans une fenêtre à part
    vec3 lightDirection = normalize(uPointLightingLocation.xyz);// - mvPosition.xyz
    Pourquoi as-tu commenté la différence entre la position de la lumière et celle du vertex ?
    J e ne suis pas un expert en pipeline de lightening mais je pense que l’atténuation de l’intensité lumineuse résulte forcement de la distance entre ces deux points. Encore faut il que c’est 2 points soient exprimés dans le même repère ….

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Par défaut
    Attention WebGL n’est absolument pas un moteur 3D c’est juste une API.
    Oui oui oui ^^ Me suis peut-être mal exprimé, mais l'idée globale reste la même...

    Tu devrais plutôt utiliser un vrais moteur 3D comme O3D ou Three.js !
    Ben figure toi que c'est la solution alternative vers laquelle j'ai commencé à me tourner hier ^^ Mais O3D ne me plait pas, Three.js à l'air plutot sympathique.. Quoi que je n'aime pas trop le principe d'ajouter dans le script principale plein de petites fonctions toutes prêtes, notamment pour le contrôle clavier, sans laisser la possibilité de les customiser à l'appel ; m'enfin un tour dans le code source et on y arrive...

    Concernant la modification des tutoriaux, je suis moit-moit' d'accord avec toi ; en effet, les tutoriaux ont pour but d'apprendre une fonctionnalité. Ici par exemple, l'un apprends à se "déplacer", l'autre à ajouter une lumière directionnelle ; ce sont mes deux objectifs. Là, manque de chance, il ne s'accumule pas si facilement...

    En effet, dans mon calcul, j'ai mis ça en commentaire mais uniquement dans le but de voir le résultat ; j'ai encore pas mal de soucis pour saisir comment les calculs sont effectués, j'y vais donc "à taton" pour comprendre les principes. Dans la globalité, je les ai compris ; dans les faits, je luttes à les utiliser...

    Encore faut il que c’est 2 points soient exprimés dans le même repère...
    C'est exact, et à ce sujet je ne me suis pas appuyé sur le tutoriel, mais sur un commentaire dans un tuto, où une personne expliquait ce soucis de répère, et la correction. Cette correction m'a pas mal aidé, mais il reste un soucis de coordonnées pendant la rotation de la caméra, donc concrètement pendant la rotation de "monde" autour de la caméra, la lumière reste fixe au lieu de suivre le mouvement...

    UN sacré casse-tête ces histoires de vertex

    Si jamais je n'y arrive vraiment pas, je poursuivrais avec Three.js ; mais par intérêt personnel, j'aimerais vraiment comprendre comment réussir à régler ce soucis...

    Sinon, tu as parfaitement ciblé l'emplacement du soucis ^^ C'est pile-poil l'endroit où je bloque

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Citation Envoyé par WibiMaster Voir le message
    ... l'un apprends à se "déplacer", l'autre à ajouter une lumière directionnelle ; ce sont mes deux objectifs.
    A ben y a déjà un problème ! Car ca ne ressemble pas à une lumière directionnelle mais une omi-directionelle ou PointLight, qui possède une source et éclaire dans toutes les directions avec, normalement, une atténuation quadratique de l’intensité lumineuse sur la distance (ce qui ne semble pas être le cas dans ton shader …),
    contrairement a une directionnelle qui ne possède pas de source et pas d’atténuation sur la distance.

    Citation Envoyé par WibiMaster Voir le message
    ...la lumière reste fixe au lieu de suivre le mouvement...
    Ben c’est normale la position de ta source lumineuse est fixé dans ton repère Model 3D, dans ton shader tu multipli cette position par une matrice uVMatrix, qui n’est jamais renseigné par ton application.

    Bref tu procède "à tatons" mais sait tu ce que tu souhaite obtenir ?
    si tu cherche a faire un de lampe torche a partir de ta vue FPS il te faut une SpotLight, tu peut déduire la source ainsi que la direction de ta spotlight a partir de la matrice View.
    Si tu cherche un bon article sur les techniques d’éclairage en temps réel je te conseil les tutoriaux de nvidia, certes les exemples de Shader sont écrit en Cg mais les techniques restent les mêmes.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 56
    Par défaut
    A ben y a déjà un problème ! Car ca ne ressemble pas à une lumière directionnelle mais une omi-directionelle ou PointLight, qui possède une source et éclaire dans toutes les directions avec, normalement, une atténuation quadratique de l’intensité lumineuse sur la distance (ce qui ne semble pas être le cas dans ton shader …),
    contrairement a une directionnelle qui ne possède pas de source et pas d’atténuation sur la distance.
    Bouarf, me serait donc déjà emmêlé les pinceaux... Dans mes essais, la lumière directionnelle éclairait bien un objet, mais c'est vrai que pour une pièce complète, ça ne le fait pas ; et j'avais en tête l'exemple d'un "soleil" pour l'omnidirectionnelle, mais concrètement c'est ce qu'il faut en modèle réduit en fait

    Bref tu procède "à tatons" mais sait tu ce que tu souhaite obtenir ?
    si tu cherche a faire un de lampe torche a partir de ta vue FPS il te faut une SpotLight, tu peut déduire la source ainsi que la direction de ta spotlight a partir de la matrice View.
    Oui je sais ce que je veux lol, mais non ça n'est pas une lampe torche, au contraire ; à la rigueur, une torche tout court...

    Clairement, dans ma "zone", je voudrais pouvoir positionner un lampadaire. Réduit à l’extrême, l'idée revient à ça ; pouvoir placer un point lumineux à un endroit précis, comme n'importe quel objet, sauf que celui-ci diffuse la lumière au lieu de la recevoir

    Et niveau model / view, je m'emmèle complètement, d'un parce que ça n'est pas mon domaine, mais surtout avec cette idée de zone qui se déplace autour de la caméra et non l'inverse...

    Suis complètement largué maintenant

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Citation Envoyé par WibiMaster Voir le message
    j'avais en tête l'exemple d'un "soleil" pour l'omnidirectionnelle ...
    En fait c’est l’inverse ,le soleil est souvent représenté par une directionnel les rayons frappent l’intégralité de ton monde 3D uniformément !
    pour un lampadaire ce serait plutôt une Spotlight, par contre pour un torche alors la, oui, tu as vu juste C’est bien une omnidirectionnel !

    Citation Envoyé par WibiMaster Voir le message
    Clairement, dans ma "zone", je voudrais pouvoir positionner un lampadaire. Réduit à l’extrême, l'idée revient à ça ; pouvoir placer un point lumineux à un endroit précis, comme n'importe quel objet, sauf que celui-ci diffuse la lumière au lieu de la recevoir
    Donc ta source lumineuse ne se déplace pas ? Si ce sont que des points lumineux statiques (tous ces parametres sont fixe), alors il est préférable de pré-calculer l’éclairage dans les vertexs color, une bonne fois pour toute.
    Car si tu décide a faire de l’éclairage dynamique il faudra te fixer un certain nombre de points lumineux dans l’écriture de ton shader.

    Citation Envoyé par WibiMaster Voir le message
    Et niveau model / view, je m'emmèle complètement, d'un parce que ça n'est pas mon domaine, mais surtout avec cette idée de zone qui se déplace autour de la caméra et non l'inverse...
    En fait dans ton code j’ai remarqué que tu ne distinguer pas la matrice de Vue de celle du Model, ce n’est pas un bonne pratique!
    La matrice Model est la matrice de transformation permettant le changement de position du vertex du son repère local au repère Monde, cette matrice est sauvant le résultat de la multiplication de différentes matrices local hiérarchisé par un arbre.
    La matrice de vue permet, elle, d’exprimer les positions du monde 3D dans le repère camera, ce n’est pas déplacer le monde … c’est juste un changement de repère.

    Les moteur 3D met a disposition du développeur une camera, c’est souvent une matrice exprimer dans le repère monde , quand tu décide a rendre la scene 3D , tu déduit en réalité la matrice de vue par rapport a cet camera. Cela permet de manipuler une camera le repère monde .

Discussions similaires

  1. [GLSL] Position et direction d'une lumière
    Par coda_blank dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/06/2010, 14h41
  2. Position d'une lumière
    Par JoeBlack dans le forum OpenGL
    Réponses: 7
    Dernier message: 11/12/2008, 09h28
  3. position lumière et transformation
    Par gooze dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/06/2008, 04h27

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