OpenGL3.3_C++_Windows(13)

news2024/11/25 4:14:33

demo演示

demo演示

面剔除

  1. 当我们都以逆时针绘制三角形顶点,那么从三角形的背面看就是顺时针,
  2. 面剔除正是根据这个原理,glEnable()首先启用,glCullFace()改变需要剔除的面类型(只剔除背向面,只剔除正向面,剔除正向面和背向面)
  3. glFrontFace()指定将正GL_CW/逆GL_CCW时针定义为正面

帧缓冲

  1. 帧缓冲定义:颜色缓冲,模板缓冲,深度缓冲,这些缓冲结合起来
  2. 我们可以定义自己的缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲,我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的
  3. 作用:通过创建我们自己的帧缓冲,我们可以获得额外的渲染目标(纹理,渲染缓冲对象)
  4. 创建和绑定帧缓冲到GL_FRAMEBUFFER目标上(帧缓冲可以分别绑定到读取目标或写入目标)
  5. 完整帧缓冲:附加至少一个缓冲(颜色、深度或模板缓冲),至少有一个颜色附件(纹理)(我们可以附加多个颜色附件)还可以有其他附件(渲染缓冲对象),每个缓冲都应该有相同的样本数
  6. 创建和绑定帧缓冲到GL_FRAMEBUFFER
  7. 创建纹理附件:
    1. 当把一个纹理附加到帧缓冲glFrameBufferTexture2D的时候,所有的渲染指令将会写入到这个纹理中,
    2. 为帧缓冲创建一个纹理,data参数传递了NULL,仅仅分配了内存而没有填充它,其中我们还可以将维度设置为了屏幕大小,并不关心环绕方式或多级渐远纹理
    3. glFrameBufferTexture2D()参数:
    4. 帧缓冲的目标类型,附加的附件类型(颜色附件GL_COLOR_ATTACHMENT,深度GL_DEPTH_ATTACHMENT和模板附件GL_STENCIL_ATTACHMENT),附加的纹理类型,要附加的纹理对象标识符,多级渐远纹理的级别
  8. 创建渲染缓冲对象附件:
    1. 它会将数据储存为OpenGL原生的渲染格式,它变为一个更快的可写储存介质。然而,渲染缓冲对象通常都是只写的,所以你不能读取它们
    2. 创建渲染缓冲对象附件和绑定到GL_RENDERBUFFER,它经常用于深度和模板附件,只关心深度和模板测试,不需要对它们进行采样
    3. glRenderbufferStorage创建一个深度和模板渲染缓冲对象(),GL_DEPTH24_STENCIL8作为内部格式,,24位的深度和8位的模板缓冲。glFramebufferRenderbuffer()渲染缓冲对象附加到帧缓冲:
    4. 帧缓冲的目标类型,附加的附件类型,渲染缓冲区对象的目标类型GL_RENDERBUFFER,要附加的渲染缓冲区对象的标识符
  9. 渲染到帧缓冲附件上;
    1. 绑定这个我们自己的帧缓冲对象,深度和模板操作都会从当前绑定的帧缓冲的深度和模板附件中读取
    2. 渲染场景,绘制场景,也就是,会渲染到自己的帧缓冲对象,附加的所有附件上
    3. 由于我们使用的每个帧缓冲都有它自己一套缓冲,需要调用glClear,清除这些缓冲区的内容(其实仅清除当前绑定的帧缓冲区中的颜色缓冲区)
    4. 解绑当前自己的帧缓冲 == 绑定默认的帧缓冲,禁用深度测试,绘制一个横跨整个屏幕的四边形,将帧缓冲的颜色缓冲作为它的纹理
  10. 后期处理:
    1. 后期处理:
      1. 反相:黑白反色,1 - 帧缓冲的vec4颜色
      2. 灰度:移除场景中除了黑白灰以外所有的颜色,将纹理的rgb颜色平均化
      3. 核效果:通过增强图像中的边缘和细节来提高图像清晰度和对比度,核的中心值是负数
      4. 模糊:平滑颜色值
      5. 边缘检测:捕捉图像中的不同物体之间的边界,和锐化核非常相似
    2. 核的具体实现:
      1. 创建3*3=9的偏移位置(offset = 1.0 / 300.0;)
      2. 创建3*3kernel数组,每个颜色值,for9次,卷积运算,求和后返回最终的颜色值
    3. 卷积矩阵:
      1. 作用:卷积可以用于图像锐化、模糊和边缘检测等操作
      2. 定义:卷积矩阵image,卷积核kernel(通常3*3),卷积结果
      3. 计算步骤:
        1. 卷积核矩阵翻转 180°
        2. 将卷积核h的中心对准x的第一个元素,然后对应元素相乘后相加,没有元素的地方补0。
        3. 卷积核中心从左上角顺序地行移动,直到抵达右下角。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1841321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java面试】二十一、JVM篇(中):垃圾回收相关

文章目录 1、类加载器1.1 什么是类加载器1.2 什么是双亲委派机制 2、类装载的执行过程(类的生命周期)3、对象什么时候可以被垃圾回收器处理4、JVM垃圾回收算法4.1 标记清除算法4.2 标记整理算法4.3 复制算法 5、分代收集算法5.1 MinorGC、Mixed GC、Full…

初阶 《数组》 1. 一维数组的创建和初始化

1. 一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合 数组的创建方式: type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小数组创建的实例: //代码1 int ar…

计算机图形学入门16:曲线

1.曲线 曲线(Curves)在图形学中应用非常广泛,比如:相机的拍摄路径、物体的移动路径、动画曲线、矢量字体等。如下图所示,是使用曲线到矢量字体的应用,通过移动一些控制点来改变字体。 2.贝塞尔曲线 2.1 贝…

qt事件和连接TCP协议

QT网络聊天室服务器实现 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this))//给服务器指针实例化一个空间 {ui->setupUi(this); }Widget::~Widget() {d…

Git进阶使用(图文详解)

文章目录 Git概述Git基础指令Git进阶使用一、Git分支1.主干分支2.其他分支2.1创建分支2.2查看分支1. 查看本地分支2. 查看远程分支3. 查看本地和远程分支4. 显示分支的详细信息5. 查看已合并和未合并的分支 2.3切换分支1. 切换到已有的本地分支2. 创建并切换到新分支3. 切换到远…

MyPostMan:按照项目管理接口,基于迭代生成接口文档、执行接口自动化联合测试

MyPostMan 是一款类似 PostMan 的接口请求软件,不同于 PostMan 的是,它按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,按照迭代编写自动化测试用例,在不同环境中均可运…

ASP.NET MVC企业级程序设计(增删,页面水平排列,字符串拼接,非空,添加框内默认提示)

目录 题目: 实现过程 控制器代码 DAL BLL Index Deile 题目: 实现过程 控制器代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplication1.Models;namespac…

oracle中执行select ... for update需要什么权限?

oracle中执行select … for update需要什么权限? 问题 在oracle中,一个用户执行select … for update需要什么权限? 分析测试 用户1: test_0614 用户2:test 目标表:test.t_0614 执行语句:se…

机器学习课程复习

参考书目:《统计学习方法》 选择题 5道 3分/道 填空题 5道 3分/道 简答题 3道 计算题 1道 算法设计题 1道 隐马尔可夫不考计算题 很有可能考计算题的知识点:KNN、决策树、支持向量机、聚类算法 小概率会考计算题的知识点:线性回归(最小二乘法,代公式算参…

代码随想录——全排列(Leetcode LCR083)

题目链接 回溯 class Solution {List<List<Integer>> res new ArrayList<List<Integer>>();List<Integer> list new ArrayList<Integer>();boolean[] used;public List<List<Integer>> permute(int[] nums) {used new bo…

密码学及其应用——为什么选择接近的质数因子对RSA加密算法不安全?

RSA加密算法是一种广泛使用的非对称加密算法&#xff0c;它的安全性依赖于大整数分解的难度。具体来说&#xff0c;RSA算法生成的公钥包含一个大整数N&#xff0c;这是两个大质数p和q的乘积。然而&#xff0c;如果这两个质数p和q太接近&#xff0c;则可以相对容易地对N进行因式…

【Python机器学习实战】 | Lasso回归和弹性网回归详细分析研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【STM32】矩阵计算器

【STM32】矩阵计算器 资料链接请在文章末尾获取~ 1.说明 使用元器件&#xff1a;stm32f103c8t6最小系统板x1&#xff0c;0.96寸OLED显示屏四角x1&#xff0c;4x4矩阵按键x1; 参考&#xff1a;正点原子有关4脚OLED驱动float型数据的驱动文件&#xff0c;CSDN有关矩阵横向扫描…

网络安全:入侵检测系统的原理与应用

文章目录 网络安全&#xff1a;入侵检测系统的原理与应用引言入侵检测系统简介IDS的工作原理IDS的重要性结语 网络安全&#xff1a;入侵检测系统的原理与应用 引言 在我们的网络安全系列文章中&#xff0c;我们已经涵盖了从SQL注入到端点保护的多个主题。本篇文章将探讨入侵检…

八大排序————C语言版实现

Hello&#xff0c;各位未来的高级程序员们&#xff0c;大家好&#xff0c;今天我就来为大家讲解一下有关排序的内容&#xff0c;我们常见的排序就是我们接下来要讲的这八个排序&#xff0c;我们平常所说的排序有十大排序&#xff0c;我们这里的八大排序是我们生活中最为常见的八…

【机器学习】:线性回归模型学习路线

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

探究布局模型:从LayoutLM到LayoutLMv2与LayoutXLM

LAYOUT LM 联合建模文档的layout信息和text信息&#xff0c; 预训练 文档理解模型。 模型架构 使用BERT作为backbone&#xff0c; 加入2-D绝对位置信息&#xff0c;图像信息 &#xff0c;分别捕获token在文档中的相对位置以及字体、文字方向、颜色等视觉信息。 2D位置嵌入 …

DOPE-FITC在细胞定位、动态追踪等方面的应用-星戈瑞

DOPE-FITC作为一种荧光标记磷脂&#xff0c;在细胞生物学研究中发挥着科研作用。其荧光特性和与细胞膜的亲和性&#xff0c;使其成为细胞定位、动态追踪等方面的工具。 细胞定位 DOPE-FITC能够有效地标记细胞膜&#xff0c;使得细胞膜在荧光显微镜下呈现出明亮的绿色荧光。这种…

NLP入门——复杂函数建模与链式求导

复杂函数建模 前面我们研究的梯度下降法分类&#xff0c;是简单的对每类中每个子词的分数进行求和&#xff0c;统计分数最大的类别并不断调整分数来提高准确率。 我们可以修改函数模型&#xff0c;用更加复杂的函数代替sum()&#xff0c;来达到更好的学习效果。 def compute_…

LLM大语言模型应用方案之RAG检索增强生成的实现步骤。

0.我理解的RAG 什么是RAG&#xff1f; RAG的全称是“检索增强生成模型”&#xff08;Retrieval-Augmented Generation&#xff09;。这是一种特别聪明的大语言模型。 RAG是怎么工作的呢&#xff1f; 1.检索&#xff1a;当你问RAG一个问题时&#xff0c;它会先去“图书…