Android OpenGL ES 2.0:如何使用深度图缩放纹理?

Android OpenGL ES 2.0:How to zoom texture with depth map?

Android OpenGL ES 2.0,我把bitmap和depth map bitmap绑定到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:far 255:near)

vertex_shader.glsl

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

varying vec2 varyTexCoord;

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

现在想做视差效果:根据景深值,放大图像,近区放大比远区放大,产生视差效果。 你能给我们一些想法吗?谢谢。

  1. 在规则网格的基础上创建一个网格,假设在 (x,y) 中为 10x10 space。
  2. 根据深度图设置 z 坐标。
  3. 制作uv坐标。
  4. 用你的颜色纹理渲染网格,并使用 gl_position = projectionMatrix * scale * vertex;
  5. 尝试不同尺寸的网格以找到最佳尺寸。