簡體   English   中英

如何根據OpenGL ES 2.0的深度為OpenGL ES 2.0着色?

[英]How can I colour things in OpenGL ES 2.0 based on their depth?

我正在編寫一個OpenGL ES 2.0游戲(在iOS上)。 如何創建着色器(因為我假設在着色器中這樣做更簡單),因此距離原點(在Z軸上)的幾何體看起來更暗?

這張照片中的水說明了我的想法

Zarch
(來源: bytecellar.com

如果您只想使用幾何體的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);
}

這將產生以下外觀:

深度陰影的OpenGL茶壺

我在為我的OpenGL ES 2.0類組裝的這個iPad示例代碼中有一個這樣的例子。

我用@brad提供了一個相當有趣的測試。 我只是改變了這條線:

gl_FragColor = vec4(1.0, 1.0, 0.0, zDepth);

阿爾法沒有任何事情發生。 這是我還是Alpha缺少其他東西?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM