私はOpenGL ES 2.0ゲームを作成しています(iOS上)。シェーダを作成するにはどうすればよいですか(シェーダで行う方が簡単だと思います)ので、原点(Z軸上)から遠いジオメトリは暗く見えますか?この画像でOpenGL ES 2.0で奥行きに基づいて物を色付けするにはどうすればいいですか?
水は私が考えている効果
Zarch http://www.bytecellar.com/wp-content/uploads/2010/12/Zarch_screen.png
私はOpenGL ES 2.0ゲームを作成しています(iOS上)。シェーダを作成するにはどうすればよいですか(シェーダで行う方が簡単だと思います)ので、原点(Z軸上)から遠いジオメトリは暗く見えますか?この画像でOpenGL ES 2.0で奥行きに基づいて物を色付けするにはどうすればいいですか?
水は私が考えている効果
Zarch http://www.bytecellar.com/wp-content/uploads/2010/12/Zarch_screen.png
を示しているあなたは自分のジオメトリのZ位置を使用したい場合、これは行うことは非常に簡単です。私は例を持っている
:以下表情を生み出す
attribute vec4 position;
varying float zDepth;
uniform mat4 modelViewProjMatrix;
void main()
{
vec4 newPosition = modelViewProjMatrix * position;
gl_Position = newPosition;
zDepth = (2.0 - (1.0 + newPosition.z))/2.0;
}
とフラグメントシェーダのような
varying highp float zDepth;
void main()
{
gl_FragColor = vec4(zDepth, zDepth, 0.0, 1.0);
}
:あなたは、次のように頂点シェーダを持つことができますこれはthis iPad sample codeです。私はOpenGL ES 2.0クラスのために組み立てました。
これはうまくいきます。特に、オブジェクトの色を組み込むと効果的です。コード内の '2.0'は、あなたのz深度に関係なく変更する必要があります。 – Piku
@bradが提供するもので、かなり興味深いテストをしました。私はちょうどラインを変更する:
gl_FragColor = vec4(1.0, 1.0, 0.0, zDepth);
アルファに何も起こらない。それは私ですか、それともAlpha
のようなものがありますか?
glBlendFuncが設定されていないだけでなく、ほとんどの深度値が1に近いか、GL_BLENDが無効になっています。 –
おそらく、Open GL ES 2.0の照明を探してください。 – Lordalcol