2015-09-01 3 views
1

J'essaie de faire un effet de bruit simple sur une sphère avec des shaders. J'ai essayé d'utiliser ashima's perlin noise mais l'effet n'était pas ce que j'attendais donc je crée mon propre shader basé sur Phong.Le déplacement du sommet sur la sphère brise le maillage

custom phong shader with broken dispalcement

Voici ce que je reçois avec ce code dans mon shaders sommet:

attribute int index; 
uniform float time; 

vec3 newPosition = position + normal * vec3(sin((time * 0.001) * float(index)) * 0.05); 

gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); 

index est l'indice du sommet et time le temps écoulé en cours.

L'effet sonore est exactement ce que je pensais, mais le maillage de la sphère est ouverte ...

Comment puis-je conserver cet effet et maintenir le maillage de la sphère fermée?

+0

Personnellement, je ne vois pas comment seule une transformation de position de sommet pourrait créer un artefact de couleur blanche. Sauf si vous effacez l'écran en blanc. Le problème est donc dans une autre partie de votre vertex shader ou dans le fragment shader. –

Répondre

0

Votre sphère contient probablement des sommets dupliqués. Débarrassez-vous d'eux et votre shader fonctionnera bien. Ou se débarrasser de votre dépendance de shader sur "index". Pouvons-nous voir le fragment shader aussi?

+0

C'est la géométrie de sphère standard de Three.js – Jordan

+0

Essayez de commenter "* float (index)) * 0.05". Si les trous disparaissent alors Three.js contient une sphère de merde. –

+0

Si je fais cela, j'annule l'effet de vague et n'obtiens qu'une échelle globale. Mais oui, le trou disparaît ... – Jordan