機能しないかなり単純なフラグメントシェーダーがあります。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
追加情報:
- テクスチャはアクティブなテクスチャ TEXTURE0 に GL_TEXTURE_CUBE_MAP でロードされます
- 均一な CubeMapTex は 0 に設定されます
- スカイボックスを描画するときは DrawSkyBox を true に設定し、その後は false に設定します
- 私はSharpGLを使用しました