当前位置: 首页 >  网站大师 >  Opengl学习-立方体贴图踩坑记录

Opengl学习-立方体贴图踩坑记录

导读:2023/10/25 星期三.昨晚写到了凌晨1点,今早终于查出了问题,写一篇随笔记录一下.绑定到特定纹理单元,沿用TEXTURE_2D方式:.glActiveTexture(GL_TEXTURE0 + slot);.glBindTexture(GL_TEXTURE_CUBE_MA

2023/10/25 星期三
昨晚写到了凌晨1点,今早终于查出了问题,写一篇随笔记录一下

  1. 绑定到特定纹理单元,沿用TEXTURE_2D方式:

    glActiveTexture(GL_TEXTURE0 + slot); glBindTexture(GL_TEXTURE_CUBE_MAP, id);

  2. (更正)Cubemap可以使用Mipmap,但GL_TEXTURE_MAG_FILTER不可设置为带MIPMAP类型,否则将引发 GL_INVALID_ENUM = 1280 错误

  • 可以主动加载多个Mipmap level,在 glTexImage2D 中指定 level 参数进行加载,常用于IBL(Image Based Lighting)中的反射贴图
  • (不确定)需要设定 GL_TEXTURE_BASE_LEVELGL_TEXTURE_MAX_LEVEL 确定Mipmap level范围
  1. 在着色器中使用Cubemap
  • 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

  1. 面不匹配问题:
  • 首先考虑读取时是否需要垂直翻转
  • 其次考虑手性,部分天空盒贴图在导出之时用的是右手系,在OpenGL左手系可能出问题
  1. 立方体面接缝问题:
  • 将三个方向的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);

  1. 注意:务必在加载立方体纹理前完成纹理参数的设置
  • 参考设置:

    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);

  1. 使用glGetError() 获取错误,有助于发现错误,定位出错位置
内容
  • Docker的Portainer认识、安装、使用
    Docker的Portainer
    2023-12-08
    一、认识.docker的图形化界面.Portainer 是一个轻量级的容器管理界面,可以让用户更轻松地管理 Docker
  • misc刷题
    misc刷题
    2023-12-04
    lsb隐写.引用一段百度内容.> LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛
  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
    虹科案例 | 丝芙兰xDomo:
    2023-12-05
    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在
  • 密评相关要求介绍
    密评相关要求介绍
    2023-12-04
    密评相关要求介绍.项目建设单位需从物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全等四个层面采用密码技术措
  • SonarQube系列-通过配置扫描分析范围,聚焦关键问题
    SonarQube系列-通过配置
    2023-12-04
    在许多情况下,你可能不希望分析项目中每个源文件的各个方面。例如,项目可能包含生成的代码、库中的源代码或有意复制的代码。在
  • SublimeText实现Markdown快速预览
    SublimeText实现Mar
    2023-12-07
    SublimeText是什么?.SublimeText是一个文本编辑器,同时也是一个先进的代码编辑器。SublimeTe