Я создал простое приложение three.js, которое отображает листы карты в 3D.Каждая плитка представляет собой отдельную сетку (плоскость с 10 сегментами высоты и 10 ширины), в которой используется THREE.ShaderMaterial
.Для доступа к данным высот я использовал Mapbox tileset .Две плитки png (высота и цвет) передаются в простой шейдер, который декодирует значение высоты:
<script id="vertexShader" type="x-shader/x-vertex">
uniform sampler2D bump;
uniform sampler2D map;
varying float vAmount;
varying vec2 vUv;
void main()
{
vUv = uv;
vec4 bumpData = texture2D( bump, uv );
vAmount = bumpData.x;
float height = (-0.4 + (bumpData.x * 256.0 * 256.0 + bumpData.y * 256.0 + bumpData.z)/1024.0);
vec3 newPosition = position;
newPosition.z = height;
gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
}
</script>
<script id="fragmentShader" type="x-shader/x-vertex">
uniform sampler2D bump;
uniform sampler2D map;
varying vec2 vUv;
varying float vAmount;
void main()
{
if(vAmount == 0.0) {
discard;
}
vec4 tile = texture2D(map, vUv);
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0) + tile;
}
</script>
Однако кажется, что соседние плитки имеют немного разные значения высотыпо краям.Я пытался использовать THREE.NearestFilter
для текстур, но это не имело никакого эффекта.Есть ли способ избавиться от этих белых полос?