GLSL textureCube失败

时间:2013-04-09 19:20:50

标签: c# opengl shader textures fragment-shader

我有一个相当简单的碎片器无效。它似乎与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. 纹理在活动纹理上加载GL_TEXTURE_CUBE_MAP TEXTURE0
  2. 均匀CubeMapTex设置为0
  3. 绘制天空盒时,DrawSkyBox设置为true,之后为false
  4. 我使用SharpGL

0 个答案:

没有答案