2013-01-06 2 views
1

J'essaie de créer un système solaire dans WebGL. Cependant, je n'ai aucune idée de mettre en place l'éclairage. Je veux mettre une lumière dans mon soleil et la faire projeter à 360 degrés. Mes planètes devraient lancer et recevoir des ombres. Pour y parvenir, ma lumière aurait besoin de projeter des ombres à 360 degrés. Est-il possible de faire quelque chose comme ça? Si c'est le cas, comment? Quel type de lumière dois-je utiliser?ThreeJS créer un soleil

Mon soleil a un meshBasicMaterial, mes planètes ont un meshShaderMaterial. Quelqu'un pourrait-il être si gentil de me fournir un exemple de code?

Merci!

Répondre

4

Vous devriez ajouter un THREE.PointLight pour le soleil - il projette de la lumière dans toutes les directions.

Les ombres sont plus délicates car la lumière ponctuelle dans Three.js ne prend pas en charge la création d'ombres. Vous avez un peu moins que les options idéales:

  • Utilisez 6 spots ombre uniquement ou les lumières directionnelles avec les caméras d'ombre agencés pour pointer vers chaque axe du monde (par exemple dans un cube). Cela va être plutôt cher.
  • Utilisez une (ou plusieurs) lumière de coulée d'ombre pointée vers la zone du plus grand intérêt, par ex. où l'utilisateur cherche actuellement.
  • Implémentez vous-même un ombrage omnidirectionnel (par exemple, les ombres à double paraboloïde n'ont besoin que de deux ombres au lieu de 6).
  • Omettez les ombres. Il n'y a pas vraiment beaucoup de surfaces dans l'espace qui pourraient recevoir des ombres, alors en avez-vous vraiment besoin?

Notez que avec une coutume ShaderMaterial sur un objet ombre de réception, vous devez implémenter vous ombres dans le shader (ou inclure des morceaux de code shadowing de Three.js).

+0

Bonne réponse, je vais aller avec une lumière qui pointe toujours vers la zone où l'utilisateur regarde, comme je suis un développeur web et non un programmeur 3D et je ne sais pas comment écrire mes propres shaders. Ajouter une ombre n'est pas important pour l'instant mais cela rend les choses plus réalistes (ex: la lune laisse tomber une ombre sur la terre, etc.). – user1574041

2

Il semble que vous ayez besoin d'une lumière omnidirectionnelle.

+0

Un pointlight est une lumière de 360 ​​degrés. Cependant, il ne prend pas en charge la projection d'ombre. – user1574041