1

機能しないかなり単純なフラグメントシェーダーがあります。textureCube メソッドと関係があるようです。

これはフラグメント シェーダーです。

in vec3 ReflectDir;
in vec3 RefractDir;

uniform samplerCube CubeMapTex;
uniform bool DrawSkyBox;

uniform float MaterialReflectionFactor;

void main()
{
    // Access the cube map texture
    vec4 reflectColor = textureCube(CubeMapTex, ReflectDir);
    vec4 refractColor = textureCube(CubeMapTex, RefractDir);

    if( DrawSkyBox )
    {
        gl_FragColor = reflectColor;
        gl_FragColor = vec4(ReflectDir, 1); //This line
    }
    else
        gl_FragColor = vec4(1,0,0,1);
}

ReflectDir と RefractDir は頂点シェーダーから来ていますが、それは適切なようです。

if ステートメントの 2 行目にコメントを付けると、画面全体が黒くなります (ティーポットを含む)。それ以外の場合は、次のようになります (ReflectDir は問題ないようです)。

http://i.imgur.com/MkHX6kT.png

また、キューブマップは適切にレンダリングされます (画像の順序が正しくありません)。これは、シェーダー プログラムなしでシーンがどのように見えるかです。

http://i.imgur.com/6kKzA2x.jpg

追加情報:

  1. テクスチャはアクティブなテクスチャ TEXTURE0 に GL_TEXTURE_CUBE_MAP でロードされます
  2. 均一な CubeMapTex は 0 に設定されます
  3. スカイボックスを描画するときは DrawSkyBox を true に設定し、その後は false に設定します
  4. 私はSharpGLを使用しました
4

0 に答える 0