2015-12-10 2 views
3

Je joue avec des instances et est génial.
Maintenant, j'essaye de faire en sorte que chaque instance projette des ombres mais pas de chance. J'ai fait un clone de Lambert en ajoutant la gestion de l'instance pour la position, l'échelle, etc. et ça marche, mais ça ne projette qu'une seule ombre: celle de la géométrie originale en position (0,0,0) (même si aucune instance n'est à cette position).
Quelqu'un peut-il m'indiquer où chercher pour le faire fonctionner ou est-ce une limitation d'instances ou de matériel?
Merci.TROIS.InstancedBufferGeometry et les ombres

+0

BTW, les instances ne reçoit les ombres d'autres mailles. – arnaldof

Répondre

1

Je fixe avec cette information de ce poste: http://blog.edankwan.com/post/three-js-advanced-tips-shadow

EDIT:

J'ai fait une copie de THREE.ShaderLib.depthRGBA.vertexShader et ajouté tous les attributs (translation, échelle, rotation) et code J'ai dans le matériel qui dessine réellement les instances (utilisez THREE.ShaderChunk). THREE.ShaderLib.depthRGBA.fragmentShader reste le même.

Ensuite, je créé une nouvelle THREE.ShaderMaterial avec le nouveau VS et FS créé à l'étape précédente:

mesh.customDepthMaterial = new THREE.ShaderMaterial({ 
     vertexShader: <my DepthRGBA vertex shader here>, 
     fragmentShader: THREE.ShaderLib.depthRGBA.fragmentShader, 
     .... 
    }); 
+0

pouvez-vous détailler votre réponse un peu plus s'il vous plaît? – Atrahasis

+0

@Achahasis voir la modification. J'espère que cela aide. – arnaldof

+0

Cet exemple n'est pas parfait mais il devrait aider à avoir une idée https://jsfiddle.net/mikatalk/4fn1oqz9/ – mika