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 语句中注释第二行,整个屏幕都是黑色的(包括茶壶),否则它看起来像这样(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