0

2D サイド スクローラー ゲームを作成しており、現在ライトを実装しています。ライトは、領域を明るくするために乗算された地形の上にレンダリングされた単なるライト グラデーション テクスチャです。ただし、アンビエント ライティングの方法がわかりません。次の図は私が持っているものをまとめたもので、下の部分は私が欲しいものです。

ここに画像の説明を入力

シェーダーの使用方法を知っているので、シェーダーに関する回答をお待ちしています。

4

1 に答える 1

1

最終的に、画面サイズの FBO テクスチャを作成し、アンビエンスの色でクリアし、近くのすべてのライトを描画しました。次に、ユニフォーム用に 2 つのテクスチャを取り込むシェーダーを作成しました。描画するテクスチャとライト FBO 自体。シェーダーはFBOで描画中のテクスチャを掛け合わせて綺麗に出てきました。

アンビエンス.フラグ

uniform sampler2D texture1;
uniform sampler2D texture2;
varying vec2 texCoord;

void main( void ) {
    vec4 color1 = vec4(texture2D(texture1, gl_TexCoord[0].st));
    vec4 color2 = vec4(texture2D(texture2, texCoord));
    gl_FragColor = color1*vec4(color2.r,color2.g,color2.b,1.0);
}

アンビエンス.vs

varying vec2 texCoord;
uniform vec2 screen;
uniform vec2 camera;

void main(){
    gl_Position = ftransform();
    gl_TexCoord[0] = gl_MultiTexCoord0;
    vec2 temp = vec2(gl_Vertex.x,gl_Vertex.y)-camera;
    texCoord = temp/screen;
}
于 2013-08-13T20:20:53.707 に答える