5

几周以来,我一直在尝试制作具有深度和法线贴图纹理的 2.5D 引擎,这与Linky使用的没什么不同。在认为由于 ES 2.0 缺少 gl_fragDepth 变量而无法从纹理中绘制片段着色器中的深度图后,我找到了一个 iOS 教程,其中他们使用模式 GL_MIN/GL_MAX 的 glBlendEquation 来“伪造”片段的深度缓冲到帧缓冲区纹理Linky。不幸的是,GLES20.glBlendEquation 使应用程序在我的两部手机(SGS 1/2)上崩溃,并出现 UnsupportedOperationException。所以我想知道是否有人使用此功能取得任何成功?Android Opengl ES 2.0 规范似乎也缺少 GL_MIN/GL_MAX,所以我可能在这里不走运......有什么想法吗?

顺便说一句,它似乎在 GL11Ext 中有效,但由于我使用片段着色器进行法线贴图,这对我不起作用。

4

1 回答 1

1

我正在我的 Vega 平板电脑(Tegra)上进行试验,这对我有用:

片段着色器:

#extension GL_NV_shader_framebuffer_fetch : require 
// makes gl_LastFragColor accessible

precision highp float;

varying vec2 v_texcoord;

uniform sampler2D n_sampler;

void main()
{
    vec4 v_tex = texture2D(n_sampler, v_texcoord);
    gl_FragColor = min(gl_LastFragColor, v_tex); // MIN blending
}

很容易吧?但我担心这将是仅限 NV 的。

于 2012-01-16T11:25:02.547 回答