2017-07-14 3 views
0

Je modifie les sommets des coordonnées z de ma géométrie, mais je trouve que le maillage reste de la même taille et je m'attends à ce qu'il devienne plus petit. L'interpolation entre les positions de vertex fonctionne comme prévu dans X, Y espace cependant.Shader Z perspective de l'espace ShaderMaterial BufferGeometry

Voici comment je calculer mon gl_Position par interpoler l'uniforme d'amplitude dans ma fonction render:

<script type="x-shader/x-vertex" id="vertexshader"> 

    uniform float amplitude; 
    uniform float direction; 
    uniform vec3 cameraPos; 
    uniform float time; 

    attribute vec3 tweenPosition; 

    varying vec2 vUv; 

    void main() { 

     vec3 pos = position; 
     vec3 morphed = vec3(0.0, 0.0, 0.0); 

     morphed += (tweenPosition - position) * amplitude; 

     morphed += pos; 

     vec4 mvPosition = modelViewMatrix * vec4(morphed * vec3(1, -1, 0), 1.0); 

     vUv = uv; 
     gl_Position = projectionMatrix * mvPosition; 

    } 

</script> 

J'ai aussi essayé quelque chose comme ceci du point de vue calcul sur webglfundamentals:

vec4 newPos = projectionMatrix * mvPosition; 
float zToDivideBy = 1.0 + newPos.z * 1.0; 
gl_Position = vec4(newPos.xyz, zToDivideBy); 

Cette est ma boucle pour calculer un autre ensemble de sommets que je suis entre interpoler:

for (var i = 0; i < positions.length; i++) { 
    if ((i+1) % 3 === 0) { 
     // subtracting from z coord of each vertex 
     tweenPositions[i] = positions[i]- (Math.random() * 2000); 
    } else { 
     tweenPositions[i] = positions[i] 
    } 
} 

J'obtiens le même résultat avec ceci - les objets plus éloignés dans Z-Space ne font pas d'échelle/atténuent/font quelque chose de différent. Ce qui donne?

+0

je vois pas 'Z' changement ci-dessus. Où est le code qui change 'z'? Aussi quelle est votre matrice de projection? – gman

+0

Mise à jour de la question. La matrice de projection est ce qui est passé par TROIS par défaut, si possible, en utilisant un PerspectiveCamera. read: not sure ... –

+2

'morphed * vec3 (1, -1, 0)' signifie "quel que soit le' morphed', après la multiplication sa coordonnée 'z' sera 0" – prisoner849

Répondre

0

morphed * vec3 (1, -1, 0)

z est toujours égale à zéro dans votre code.

[x, y, z] * [1, -1,0] = [x, -y, 0]