导读:2023/10/25 星期三.昨晚写到了凌晨1点,今早终于查出了问题,写一篇随笔记录一下.绑定到特定纹理单元,沿用TEXTURE_2D方式:.glActiveTexture(GL_TEXTURE0 + slot);.glBindTexture(GL_TEXTURE_CUBE_MA
2023/10/25 星期三
昨晚写到了凌晨1点,今早终于查出了问题,写一篇随笔记录一下
绑定到特定纹理单元,沿用TEXTURE_2D
方式:
glActiveTexture(GL_TEXTURE0 + slot); glBindTexture(GL_TEXTURE_CUBE_MAP, id);
(更正)Cubemap可以使用Mipmap,但GL_TEXTURE_MAG_FILTER
不可设置为带MIPMAP类型,否则将引发 GL_INVALID_ENUM = 1280
错误
glTexImage2D
中指定 level
参数进行加载,常用于IBL(Image Based Lighting)中的反射贴图GL_TEXTURE_BASE_LEVEL
和 GL_TEXTURE_MAX_LEVEL
确定Mipmap level范围Uniform 声明:
uniform samplerCube texture0;
使用:
vec3 direction = vec3(1.0, 0.0, 0.0); vec3 cubemap_color = texture(texture0, direction).rgb;
注意:不需要额外对方向向量做归一,任意非0的方向向量都可以返回在该方向上的立方体贴图采样
使用特定LOD(需要传入多个level的纹理):
float level = 0.5; vec3 cubemap_color = textureLod(texture0, direction, level).rgb;
对于textureLod,详情见 textureLod - OpenGL 4 Reference Pages
将三个方向的wrap mode均设置为 GL_CLAMP_TO_EDGE
:
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
参考设置:
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_LEVEL, 0);
glGetError()
获取错误,有助于发现错误,定位出错位置上一篇:重磅更新!Sermant 1.2
下一篇:界面重建——Marching c