Почему мой z-индекс с тремя js не создает плавную кривую

#javascript #three.js #3d #glsl

#javascript #three.js #3D #glsl

Вопрос:

Я пытаюсь обернуть плоскость вокруг конуса в three.js использование карты глубины для целей обучения. Я импортирую карту глубины в свой вершинный шейдер с помощью uniform, затем получаю из нее значение цвета по заданной uv-координате, а затем перемещаю z-значение вершины на заданное значение цвета:

 // Import depthmap
uniform sampler2D uDepthMap;

varying vec2 vUv;
 
void main() {   
    vUv = uv; 
    vec3 pos = position;

    // Get depthmap green value
    float bumpValue = texture2D(uDepthMap, vUv).g;

    // Move Z by greenvalue of depthmap
    pos.z = pos.z   bumpValue * 7.0;
    
    gl_Position = projectionMatrix * modelViewMatrix * vec4( pos, 1.0 );
}
  

Учитывая приведенную ниже карту глубины (плавный градиент) Я ожидаю, что моя плоскость создаст плавную кривую, но в дальних вершинах x плоскость выглядит так, как показано на изображении.

Карта глубины и результирующий z-индекс

Итак, мне интересно, как использовать карту глубины, чтобы правильно согнуть плоскость в непрерывной кривой?

Редактировать:

Вот моя плоскость и настройки моей камеры;

 
   const camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 60);

   const planeGeometry = new THREE.PlaneBufferGeometry(10,5,128,64);
   const planeMat = new THREE.ShaderMaterial(
            {
                wireframe: true,
                vertexShader: vshader,
                uniforms: this.uniforms,
                fragmentShader: fshader
            }
        );
  

Кроме того, все находится в настройках по умолчанию.

Комментарии:

1.Смещение вычисляется для каждой вершины. Координаты пространства клипа между вершинами интерполируются во время растеризации. Сколько у вас вершин, какова minFilter из uDepthMap текстуры?

2. Спасибо за ответ. Таким образом, стороны просто кажутся неправильными, потому что они находятся дальше на расстоянии, и поэтому интерполированный угол меньше, чем должен быть? Я пытаюсь понять, что вы там говорите. Плоскость 10 на 5 и имеет 128 сегментов. Я не знаю о minFilter, но, согласно ТРЕМ документам Js, поэтому по умолчанию он должен иметь значение THREE.LinearMipmapLinearFilter .