3

OpenGL es 2.0 でシェーダーを使用して 2 つのテクスチャを結合しようとしています。

ここに画像の説明を入力

スクリーンショットでわかるように、動的環境マッピングを使用して後方オブジェクトに針の反射を作成しようとしています。しかし、針の反射は半透明に見え、環境マップとブレンドされています。

これが私のフラグメントシェーダーです。

varying highp vec4 R;

uniform samplerCube cube_map1;
uniform samplerCube cube_map2;

void main()
{
    mediump vec3 output_color1;
    mediump vec3 output_color2;

    output_color1 = textureCube(cube_map1 , R.xyz).rgb;
    output_color2 = textureCube(cube_map2 , R.xyz).rgb;

    gl_FragColor = mix(vec4(output_color1,1.0),vec4(output_color2,1.0),0.5);  
}

しかし、"mix" メソッドは 2 つのテクスチャをブレンドします。

Texture Combinersの例も確認しましたが、どちらも役に立ちませんでした。

互いにブレンドせずに 2 つのテクスチャを組み合わせる方法はありますか。

ありがとう。

4

1 に答える 1

1

コメントから判断すると、風景画の上に針を描きたいと思います。私は単にオーバーレイとしてレンダリングしますが、シェーダーで実行したいので、これでうまくいくかもしれません:

void main()
{
    mediump vec3 output_color1;
    mediump vec3 output_color2;

    output_color1 = textureCube(cube_map1 , R.xyz).rgb;
    output_color2 = textureCube(cube_map2 , R.xyz).rgb;

    if ( length( output_color1 ) > 0.0 )
         gl_FragColor = vec4(output_color1,1.0);
    else 
         gl_FragColor = vec4(output_color2,1.0);
}
于 2012-08-07T14:56:58.323 に答える