首页 > 其他分享 >Opengl学习-立方体贴图踩坑记录

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

时间:2023-10-25 19:44:26浏览次数:34  
标签:贴图 MAP CUBE Opengl glTexParameteri TEXTURE 立方体 CLAMP GL

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

  1. 绑定到特定纹理单元,沿用TEXTURE_2D方式:
glActiveTexture(GL_TEXTURE0 + slot);
glBindTexture(GL_TEXTURE_CUBE_MAP, id);
  1. Cubemap无法生成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() 获取错误,有助于发现错误,定位出错位置

标签:贴图,MAP,CUBE,Opengl,glTexParameteri,TEXTURE,立方体,CLAMP,GL
From: https://www.cnblogs.com/stehsaer/p/17787968.html

相关文章

  • 吊打收费好用到爆系列软件:免费绘画软件 草图概念图 动画 漫画 插画、接景甚至 3D 贴图
    吊打收费好用到爆系列软件:免费绘画软件草图概念图动画漫画插画、接景甚至3D贴图防抖、数位板、色彩管理、滤镜压感图层官方承诺绝无功能限制或商业限制,可以自由免费使用!请点击文后【阅读原文】查看更多优爱酷优爱酷,专注研究AI技术、专心探索软件奥秘、专业研发......
  • LearnOpenGL 2D游戏breakout总结
    Breakout​ 简介-LearnOpenGLCN(learnopengl-cn.github.io)​ 2D游戏BreakOut实现以及对OpenGL一些知识点的总结。1.项目结构game类:用于管理所有游戏和渲染代码,提供初始化、游戏重置、键盘输入、更新游戏状态、渲染、碰撞检测、生成更新游戏道具的函数。resource_manage......
  • Mesa 23.2 带来了 Asahi 平台上的 OpenGL 3.1 和 OpenGL ES 3.0 支持,新增 RADV 功能
    导读这个版本还为RADV驱动器引入了新的Vulkan扩展以及为许多游戏进行了改进。Mesa23.2开源图形堆栈是Mesa23系列的第二个主要版本,为AMDGPU的RADVVulkan驱动器、改进的 Linux 游戏以及新的Asahi功能带来了新功能。Mesa23.2的亮点包括Asahi平台上......
  • vue2使用 tinymce富文本编辑器-图片上传、粘贴图片上传致服务器
    1.安装tinymce富文本编辑器插件npmitinymcenpmi@tinymce/tinymce-vue2.创建Editor.js文件封装组件以便使用<template><divclass="tinymce-editor"><editorv-model="myValue":init="init":disabled="disabled&qu......
  • 图形类——剪图+贴图+马赛克+箭头+标注+取色
    1.Snipaste是一个简单但强大的贴图工具,同时也可以执行截屏、标注等功能。 Snipaste-截图+贴图 ......
  • Qt OpenGL textures详解
    1.初始化opengl资源 Q_INIT_RESOURCE:textures(资源名称)QSurfaceFormat:定义3d面显示方式如果在vs+qtvstools中无法正常显示3d图形,则需加入以下代码:format.setStenciBufferSize(8);format.setVersion(1,1);版本号根据用户安装的Qt版本来更改2.继承QOpenGLWidget和QOpen......
  • OpenGL入门——矩阵变换与坐标系统
    一、OpenGL的数学库GLM向量和矩阵的运算就不作说明了,直接介绍OpenGL中如何使用矩阵变换。GLM(官网:OpenGLMathematics(g-truc.net))是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说只需包含对应的头文件就行了,不用链接和编译。把头文件的根目录复制到项目的includes......
  • OpenGL
    参考OpenGL以及视频GLFW下载链接选择已编译好的windows文件打开VS,首先创建空项目,新建Linking文件夹(新建子文件夹include和lib)在项目根目录,下载include和lib文件夹都修改为GLFW,然后放在前面新建的子文件夹include和lib文件夹然后打开项目属性->VC++目录,在包含目录中添加$(So......
  • OpenGL——着色器设置绘制对象颜色及透明度
     {https://blog.csdn.net/weixin_46568899/article/details/129217018} {。着色器的编写结构如下:1.声明版本(很重要,版本不对的话会得到不同的绘制结果)。2.使用location指定输入变量。3.定义输入输出变量(用in和out关键字)。4.main函数。以下是一个简单的例子:   constcha......
  • 光栅化与纹理贴图
    光栅化:投影到屏幕上的物体将它划分为一个一个三角形,通过纵线和横线分割成pixel。主要确定这些三角形应当由哪些像素组成在这个过程中,会出现走样问题。物体->三角形->pixel纹理贴图:主要确定漫反射系数纹理贴图:通过光栅化后,物体变为各个三角形,三角形有被分为Pixel,纹理贴图的操作......