我有一个相当简单的片段着色器,它不起作用。它似乎与 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
附加信息:
- 纹理在活动纹理 TEXTURE0 上加载了 GL_TEXTURE_CUBE_MAP
- 统一的 CubeMapTex 设置为 0
- DrawSkyBox 在绘制天空盒时设置为 true,之后设置为 false
- 我使用了 SharpGL