|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Damien Inscription : juillet 2009 Messages : 50 ![]() |
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 |
|
|
00
|
|
|
#2 | |
|
Membre régulier
![]() Inscription : octobre 2010 Messages : 65 ![]() |
Citation:
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 :
vec3 lightDirection = normalize(uPointLightingLocation.xyz);// - mvPosition.xyz 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 …. |
|
|
|
00
|
|
|
#3 | |||
|
Futur Membre du Club
![]() Damien Inscription : juillet 2009 Messages : 50 ![]() |
Citation:
Citation:
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... Citation:
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 |
|||
|
|
00
|
|
|
#4 | |
|
Membre régulier
![]() Inscription : octobre 2010 Messages : 65 ![]() |
Citation:
contrairement a une directionnelle qui ne possède pas de source et pas d’atténuation sur la distance. 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. |
|
|
|
00
|
|
|
#5 | ||
|
Futur Membre du Club
![]() Damien Inscription : juillet 2009 Messages : 50 ![]() |
Citation:
Citation:
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 |
||
|
|
00
|
|
|
#6 | |||
|
Membre régulier
![]() Inscription : octobre 2010 Messages : 65 ![]() |
Citation:
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:
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:
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 . |
|||
|
|
00
|
|
|
#7 | ||||
|
Futur Membre du Club
![]() Damien Inscription : juillet 2009 Messages : 50 ![]() |
Citation:
Citation:
Citation:
Citation:
Je risque de dire un truc super stupide pour les connaisseurs, mais bon j'me lance histoire de comprendre pourquoi c'est bête ^^ Ne pourrait-on pas, très simplement, créer un cube sans texture (transparent), le placer où l'on veut dans la scène, et placer la lumière dans ce cube, en plein centre ? Du coup, quand je me "déplace", mes cubes restent où il faut dans la scène, ça, ça gère bien ; donc la lumière, restant dans le cube, serait toujours bien placée aussi, nan ? Plutôt que de la placer dans le repère "scène", la placer dans le repère "cube", lui-même placé dans le repère "scène".. Bon après doit bien y avoir une raison pour laquelle personne ne m'a proposé cette idée, et j'ignore même comment la mettre en place, mais ça me semblait "réaliste"... Sauf si la "lumière" "rebondit" sur les parois "invisibles" (tout plein de guillemets là )En tout cas un gros merci pour tes réponses, petit-à-petit je comprends mieux le concept, et quand j'aurais les bases suffisantes niveau code webGL pour faire ce que je veux, tes explications me seront d'une grande aide |
||||
|
|
00
|
|
|
#8 | |||||
|
Membre régulier
![]() Inscription : octobre 2010 Messages : 65 ![]() |
Citation:
![]() Citation:
Citation:
Citation:
![]() En tous cas … tu pressens l’avantage de la hiérarchisation de ton monde 3D par un arbre dont chaque nœuds possèdent un repère local, cela a pour avantage de :
Citation:
C’est un peut le reproche que je fais aux tutoriaux d’openGL qui explique plus que brièvement le model mathématique pour mettre l’accent sur l’implémentation OpenGL de cette technique. A eux seul, les tutos OpenGL, ne peuvent, donc, t’apprendre les mécaniques de la 3D temps réel. Je pense que ce fils de discussion serait plus vivant dans le forum Développement 2D, 3D et jeux, tu aurais certainement des réponses plus pertinentes par des professionnels de la 3D temps réel. |
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com