首页/新闻资讯/正文详情

OpenGL的帧缓冲和纹理使用逻辑

发布时间:2026/9/27 22:33:47 来源:云帆数科 栏目:资讯中心
OpenGL的帧缓冲和纹理使用逻辑
一、先简单说一下OpenGL的纹理使用本质上还是状态机要把加载的图片放到插槽里面然后着色器通过访问插槽去拿到纹理。因此纹理从加载到使用需要经历如下步骤(1-5可以写成一个纹理加载函数)1.先绑定纹理告诉opengl接下来的操作在这个id上glBindTexture(GL_TEXTURE_2D, textureID);2.上传纹理数据glTexImage2D(GL_TEXTURE_2D, 0, format,width, height, 0,format, GL_UNSIGNED_BYTE, data);3.设置mimap自动生成多级纹理glGenerateMipmap(GL_TEXTURE_2D);4.设置纹理环绕方式横向和竖向也就是超过0-1的坐标如何重复去做glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);5.设置放大缩小的过滤方式一般是mimap线性插值算法 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);6.渲染时一定要先激活纹理单元并绑定纹理上去glActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D, diffuseMap);glActiveTexture(GL_TEXTURE1);glBindTexture(GL_TEXTURE_2D, specularMap);7.此时在Fragment shader里面才可以通过sampler2D 变量名 去访问到纹理sampler2D diffuse;sampler2D specular;vec3 ambient light.ambient * texture(diffuse, TexCoords).rgb;二、OpenGL帧缓冲FBO帧缓冲顾名思义就是自己创建一个缓冲来存放临时数据。帧缓冲其实只是一个容器不能单独使用必须绑定颜色附件或者再加上一个深度/模板缓冲颜色附件其实就是一个纹理只不过这个纹理不是读进来的而是创建一个空白的内存。深度和模板缓冲一般用渲染缓冲对象rbo这个没有什么特别的只是因为这两个东西不需要采样因此换了一个高效的数据格式如果需要采样深度其实也可以用纹理附件去存深度。下面是帧缓冲的创建//1.创建帧缓冲 unsigned int framebuffer; glGenFramebuffers(1, framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); //2.创建并添加纹理附件 unsigned int textureColorbuffer; glGenTextures(1, textureColorbuffer); glBindTexture(GL_TEXTURE_2D, textureColorbuffer); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); //创建空白的纹理内存 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorbuffer, 0); // 3.创建rbo用来做深度缓冲 unsigned int rbo; glGenRenderbuffers(1, rbo); glBindRenderbuffer(GL_RENDERBUFFER, rbo); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, SCR_WIDTH, SCR_HEIGHT); // use a single renderbuffer object for both a depth AND stencil buffer. glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);下面是帧缓冲的使用//1.绑定缓冲为自己创建的帧缓冲保证接下来渲染的内容放到帧缓冲 glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); glEnable(GL_DEPTH_TEST); // enable depth testing (is disabled for rendering screen-space quad) //渲染前清理一下buffer glClearColor(0.1f, 0.1f, 0.1f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //渲染 . . . //2.切换绑定的缓冲到默认缓冲 glBindFramebuffer(GL_FRAMEBUFFER, 0); //同样清理一下缓冲 glClearColor(0.1f, 0.1f, 0.1f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //接下来绑定纹理附件到纹理此时去fragment shader操作就相当于是对纹理后处理 glBindTexture(GL_TEXTURE_2D, textureColorbuffer); //渲染 . . .

相关推荐

北京车展和上海车展将无缝衔接
北京车展和上海车展将无缝衔接

问差友们一个问题啊,你们觉得今年的前五个月,国内的车企们一共发布了多少台新车?给一个提示哈,在2015 年新能源汽车还没有怎么出现的时候,整个国内市场发布的新车数量是 84 台( 仅计算开了发布会的&#xf… · 2026/9/21 8:41:42

Mysql数据语法(基础语法)
Mysql数据语法(基础语法)

一、增 1.创建数据库 create database 库名; 2.创建新表 create table 表名; 3.新增数据 列表依次新增 insert into 表名 values (值1,值2...); 指定字段新增 insert into 表名(列1,列2,列3)values(值1,值2&#xff0c… · 2026/9/20 7:00:49

Java毕业设计-基于 SpringBoot 框架的智能化社区健康监测系统的设计与实现 基于 SpringBoot 的智慧社区健康信息管理系统的(源码+LW+部署文档+全bao+远程调试+代码讲解等)
Java毕业设计-基于 SpringBoot 框架的智能化社区健康监测系统的设计与实现 基于 SpringBoot 的智慧社区健康信息管理系统的(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… · 2026/9/19 5:08:42

AIGC智能编程实战:大模型代码助手巧学巧用与TaoToken配置指南
AIGC智能编程实战:大模型代码助手巧学巧用与TaoToken配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:47

OpenAI自研芯片降本50%背后:用TaoToken统一Key打通AI工具链配置
OpenAI自研芯片降本50%背后:用TaoToken统一Key打通AI工具链配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:47

MacOS/Linux 安装 ClaudeCode 终极指南:TaoToken 统一 Key 配置与 Vscode 调试技巧
MacOS/Linux 安装 ClaudeCode 终极指南:TaoToken 统一 Key 配置与 Vscode 调试技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:47

AI Agent上线后第一个大坑:用TaoToken统一Key排查它为什么开始“不听话”
AI Agent上线后第一个大坑:用TaoToken统一Key排查它为什么开始“不听话”

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:47

VSCode 主题 Nebula Theme 配 TaoToken:settings.json 骨架与主题切换验证
VSCode 主题 Nebula Theme 配 TaoToken:settings.json 骨架与主题切换验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:47

OpenClaw v2026.4.9 初始化安装推荐“技能包”(Skills):TaoToken 统一 Key 接入与 config.toml 骨架
OpenClaw v2026.4.9 初始化安装推荐“技能包”(Skills):TaoToken 统一 Key 接入与 config.toml 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:33:40

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码