5

ここ数週間、深度と法線マップ テクスチャを備えた 2.5D エンジンを作成しようとしていますが、ここで使用されているLinkyとは異なります。ES 2.0 に gl_fragDepth 変数がないため、テクスチャからフラグメント シェーダーで深度マップを描画することは不可能であると考えた後、iOS のチュートリアルを見つけました。そこでは、GL_MIN/GL_MAX モードで glBlendEquation を使用して、フラグメントの深度バッファリングを「偽造」しました。 framebuffer-texture Linky に。残念ながら、GLES20.glBlendEquation により、両方の電話 (SGS 1/2) でアプリケーションが UnsupportedOperationException でクラッシュします。誰かがこの機能を使用して成功したかどうか疑問に思っていますか? GL_MIN/GL_MAX も Android Opengl ES 2.0 仕様から欠落しているように見えるので、おそらくここで運が悪い...何かアイデアはありますか?

ところで、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 に答える