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?
je vois pas 'Z' changement ci-dessus. Où est le code qui change 'z'? Aussi quelle est votre matrice de projection? – gman
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 ... –
'morphed * vec3 (1, -1, 0)' signifie "quel que soit le' morphed', après la multiplication sa coordonnée 'z' sera 0" – prisoner849