Android OpenGL ES 2.0: как увеличить текстуру с помощью карты глубины?

#android #opengl-es #opengl-es-2.0

#Android #opengl-es #opengl-es-2.0

Вопрос:

Android OpenGL ES 2.0, я привязываю растровое изображение и растровое изображение карты глубины к fragment_shader.glsl ,

 precision mediump float;

uniform sampler2D sDepth;
uniform sampler2D sTexture;
uniform float time;

varying vec2 varyTexCoord;

void main() {
    vec4 depth=texture2D(sDepth, varyTexCoord);    
    gl_FragColor=texture2D(sTexture, varyTexCoord);
}
 

sTexture : исходное растровое изображение

sDepth : карта глубины (ARGB_8888, 0 ~ 255, 0: далеко 255: близко)

vertex_shader.glsl

 attribute vec4 vPosition;
attribute vec2 vTexCoord;
uniform mat4 vMatrix;

varying vec2 varyTexCoord;

void main() {
    gl_Position = vPosition;
    varyTexCoord = vTexCoord;
}
 

теперь я хочу создать эффект параллакса: в соответствии со значением глубины резкости, увеличьте изображение, увеличение ближней области выше, чем у дальней области, создавая эффект параллакса.
Можете ли вы дать нам несколько идей? Спасибо.

Ответ №1:

  1. Создайте сетку на основе обычной сетки, скажем, 10×10 в (x, y) пространстве.
  2. Установите координату z из карты глубины.
  3. Создайте uv-координаты.
  4. Визуализируйте сетку с вашей цветной текстурой и используйте gl_position = projectionMatrix * scale * vertex;
  5. Попробуйте разные размеры сетки, чтобы найти лучший.