Comment créer de la lumière directionnelle ombre Three.JS?
Est-il possible de créer des zones d'ombres à partir d'un DirectionalLight
?
Si j'utilise SpotLight
puis je vois une ombre, mais si j'utilise DirectionalLight
il ne fonctionne pas.
- Pouvez-vous partager le code que vous avez essayé et cela ne fonctionne pas?
- J'ai tout essayé, mais encore ne fonctionne pas. Code: jsfiddle.net/Q4uqE/1
Vous devez vous connecter pour publier un commentaire.
Oui, vous avez très certainement peut utiliser des lumières directionnelles pour projeter des ombres. Vous devez vous assurer que vous n'utilisez pas
MeshBasicMaterial
comme ils ne prennent pas en charge les ombres. UtilisationMeshLambertMaterial
ouMeshPhongMaterial
à la place.Vous devez activer les ombres pour le moteur de rendu avec quelque chose le long de ces lignes:
Et puis vous devez activer l'ombre de la coulée et de l'ombre de la réception par objet et par la lumière de sorte que vous auriez
Puis, si la lumière et les objets sont placés à des positions appropriées.
dirLight
sera la cause de l'ombre deobject
être exercé à l'encontreotherObject
.[EDIT]: Ici est un travail de démonstration pour ceux qui cherchent à faire quelque chose de similaire.
light.shadowCameraVisible
ne pas faire n'importe quoi dans cette fourche exemple? jsfiddle.net/Q4uqE/566Être conscient que les cartes d'ombre sont dépendant de l'échelle. Je suis en train de travailler sur une scène où l'unité de distance représente un mètre, et mes objets sont d'environ 0,4 mètres de large. C'est assez petit par Three.js des normes. Si vous disposez de cette situation, alors vous pouvez prendre quelques mesures importantes:
Voyons comment faire cela.
De débogage
Veillez à activer le débogage rendu par la lumière via
CameraHelper
:Ou dans les anciennes versions de l'Three.js:
Cela va vous montrer le volume dans lequel l'ombre est calculé. Voici un exemple de ce à quoi cela pourrait ressembler:
Avis de la de près et de loin avions (avec les croix noires), et le haut/gauche/bas/droite de l'ombre de la caméra (les murs extérieurs de la boîte jaune.) Vous voulez cette case pour être serré autour de ce que les objets que vous allez avoir dans l'ombre — peut-être encore plus serré que je vous montre ici.
Code
Voici quelques extraits de code qui peut être utile.
Assurez-vous que des objet(s) des ombres:
Assurez-vous que des objet(s) à recevoir des ombres:
Enfin, configurer certaines valeurs sur le
WebGLRenderer
:light.shadowCameraVisible = true
travail? Il ne semble pas faire quoi que ce soit dans cette fourche exemple (à partir de la accepté la réponse ci-dessus): jsfiddle.net/Q4uqE/566light.shadowCameraVisible = true
:scene.add(new THREE.CameraHelper(camera))
scene.add(new THREE.CameraHelper(light.shadow.camera));