OpenGL3.3_C++_Windows(19)

news2024/12/27 13:34:35

Demo演示

1

几何着色器

几何Geometry glsl 发生在什么阶段?

  1. 图形渲染管线:

  2. 顶点数据——顶点着色器阶段——图元装配;(Geometry glsl )——光栅化阶段——裁切——片段着色器——测试和混合
  3. 可选的Geometry几何着色器(非必要)
  4. Geometry作用:对顶点数据随意更改,它能够变换为完全不同的图元,并且还能生成比原来更多的顶点。

在geometry glsl中:

  1. 输入图元值:

  2. (()内表示:一个图元所包含的最小顶点数)
  3. 指定输入:

  4. 需要声明从顶点着色器输入的图元类型:in关键字前声明一个布局修饰符,这个输入布局修饰符
  5. 输出图元值:pointsline_striptriangle_strip
  6. 指定输出:
  7. 我们还需要指定几何着色器输出的图元类型,这需要在out关键字前面加一个布局修饰符 && 并设置一个它最大能够输出的顶点数量

理解指定输入输出图元值:

  1. 顶点数据是一系列顶点的集合,指定了输入图元值,决定多少个顶点作为一组输入(对顶点数据分组)
  2. 将这每组输入,几何变换为新的图元形状

in out:

  1. 将 vertex着色器阶段的输出out:gl_Position,gl_PointSize,gl_ClipDistance[];,作为geometry glsl的输入in:
  2. 接口块(Interface Block)类似struct,in / out  + 块名(不同glsl中需要一致){……}实例名(不同glsl中无需一致)
  3. 定义一个接口块数组【】进行vertex和geometry之间的传输:
  4. (大多数的输入渲染图元包含多于1个的顶点,而几何着色器的输入是一个图元所有顶点。)
  5. 为什么用接口快,不用普通的in/out?
  6. 输入图元作为数组【】,如果不用接口块,其实要写为in type name[],这种形式,接口块会更容易处理一点

如何访问输入图元的指定顶点:

  1. 实例名[0 / 1/ 2……]:一组输入图元中,第0/1/2……顶点
  2. 几何着色器中的fun函数:几何着色器至少生成一个输出图元
    1. EmitVertex发射顶点:调用时,会被添加到图元中来
    2. EndPrimitive结束:合成为指定的输出渲染图元
  3. glDrawArrays()中渲染的图元模式mode如何确定?
  4. 根据geometry中in的图元值就行,因为你是将这个图元值的顶点数作为一组绘制,至于geometry如何变换,不在mode的考虑中。

Geometry glsl作用:

  1. 图元形状是在GPU动态生成的,这会比在顶点缓冲中手动定义(大量的顶点数据)图形要高效很多。(例如仅传入一个顶点,可以动态生成多个顶点)
  2. 限制:
  3. 所有图元(绘制逻辑同时影响每个图元)都做重复的事情,无法改变
  4. geometry  glsl对简单而且经常重复的形状来说是一个很好的优化工具(比如粒子,每个粒子顶点,都变换为如圆点、小箭头或星形的新图元)

理解向量:

  1. 向量是什么?

  2. 向量是一个抽象的概念,涉及一系列简单 /复杂的 公式定义

  3. 抽象概念:
  4. 被映射到 抽象(物理,渲染,数学……) /  具体(实际生活),从而解决实际的需求。
  5. 向量公式:
  6. 向量定义:在抽象3D空间中,向量近似箭头(长度+方向),当对箭头平移时,长度+方向都不会改变。世界中心映射为向量起点,顶点坐标的位置映射为向量的终点,
  7. 向量加减:可以改变物体到新的位置,也可以计算两个位置相对方向 / 距离……
  8. 应用:三角形表面的线根据向量相减求得:已知三个顶点坐标(向量),带入可得坐标间的连线(注意获得的新箭头方向,箭头终点坐标 - 箭头起点坐标)
  9. 向量叉乘:获取垂直于其它两个向量的一个向量
  10. 求法线:三角形表面的线映射为叉乘需要的两个向量,法线映射为叉乘的结果
  11. 向量归一化:获得长度为1,方向不变的向量
  12. 应用:对法线归一化,只关系方向,不关心长度
  13. 向量*标量:对向量本身操作,改变方向 / 大小

demo演示

2

实际应用:

  1. 顶点着色器处理的是单个顶点的位置计算,而几何着色器处理的是整个图元,可以对例如三角形图元操作,
  2. 爆破物体:

    1. 计算每个三角形(因为要以图元形式爆破)图元的法线(非顶点法线,顶点法线可以由vertex得到):归一化(向量相减 + 叉乘)
    2. 对于每个三角形的3个顶点,都沿着法线方向随glfwGetTime()移动移动:向量相乘 + 向量相加

Demo演示

3
  1. 法线可视化:

    1. 首先不使用几何着色器正常绘制场景,正常渲染所有顶点
    2. 再次绘制场景,但这次只显示通过几何着色器生成法向量(每个顶点一个法向量line_strip),
    3. 我们需要每个顶点 的法线:为了适配(观察和模型矩阵的)缩放和旋转,获取归一化的法线(这回已经是正确的方向了。
mat3 normalMatrix = mat3(transpose(inverse(view * model)));//计算法线矩阵
vs_out.normal = normalize(vec3(vec4(normalMatrix * aNormal, 0.0)));//将法线变换到正确方向

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

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

相关文章

龙芯久久派到手开机测试

今天刚拿到龙芯久久派,没看到文档,只有视频,我来写个博客,做个记录,免得以后忘记 1.连接usb转ttl串口与龙芯久久派,如图所示。 2.将usb转串口接到电脑USB口 也就是这个接电脑上 3.打开串口调试助手或Secu…

前端路由管理

前端路由管理简介: 当谈到前端路由管理时,通常指的是在单页面应用程序(SPA)中管理页面间导航和URL的过程。路由管理器是一个工具,可以帮助前端开发者定义应用程序的不同视图之间的关系,同时能够响应URL的改…

广东省钟表行业协会第十二届会员大会暨2024年钟表行业发展交流会

6月25日广东省钟表行业协会第十二届会员大会暨2024年钟表行业发展交流会在广州万富希尔顿酒店隆重召开。大会选举沙胜昔为广东省钟表行业协会第十二届理事会会长。 领导发言 新任会长 沙胜昔 首席荣誉会长 吴伟阳 新老会长交接仪式 本次大会,全国钟表大伽齐参与…

美业门店管理系统中收款门店对应的加盟商如何查看?美业系统源码、演示视频分享私

专业的美业系统更加贴合美业门店的经营需求,提供了更全面、便捷、高效的管理功能,有助于提升门店的服务质量和经营效益。博弈美业系统包括PC、iPad、手机、小程序四大端口,满足不同人群的各种需求。 ▶ 收款门店对应的加盟商如何查看&#xf…

找不到d3dcompiler_43.dll无法继续执行的修复指南

在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“缺失d3dcompiler43.dll”。那么,这个错误提示到底是怎么回事呢?小编将从常见原因、对电脑的影响以及解决方法等方面进行详细解析。 一,了解d3dcompiler_43…

【高性能服务器】单进程服务器

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 单进程服务器 …

OLMo:真正完全开源的大模型

最近,又有一家机构AI2(Allen Institute for AI)开源了一个LLM:OLMo,它的英文全称就叫Open Language Model。相比之前开源的大模型,OLMo的独特之处是完全开源,除了训练的模型,OLMo还开…

2-requests模块(6节课学会爬虫)

2-requests模块(6节课学会爬虫) 1,安装requests2,发送get,post请求,获取响应3,response的方法方法一(Response.text)方法二(response.content.decode()&#…

综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab) 组合博弈赋权(Weighted Sum)是一种常见的多目标决策方法,用于将多个目标指标进行综合评估和权衡…

【子串】3. 无重复的最长子串

3. 无重复的最长子串 难度:中等难度 力扣地址:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 题目看起来简单,刷起来有好几个坑,特此记录一下,解法比官网的更加简单&…

Json与Java类

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON数据由键值对构成,并以易于阅读的文本形式展现,支持数组、对象、字符串、数字、布尔值…

全国31省细分产品出口数据集(2002-2022年)

数据简介:整理全国31个省直辖市自治区按hs码分的22类细分产品的出口数据,只包含22类的细分,不包含更细的类目。可用来计算出口产品质量,出口产品技术复杂度等指标,数据区间为2002-2022年。 数据名称:31省细…

安卓开发自定义时间日期显示组件

安卓开发自定义时间日期显示组件 问题背景 实现时间和日期显示,左对齐和对齐两种效果,如下图所示: 问题分析 自定义view实现一般思路: (1)自定义一个View (2)编写values/attrs.…

【小学期】常用基于Swing的七个静态界面

示例1:基本的带按钮和标签的界面 import javax.swing.*; import java.awt.*;public class SimpleSwingApp1 {public static void main(String[] args) {JFrame frame new JFrame("Simple Swing App 1");frame.setDefaultCloseOperation(JFrame.EXIT_ON_C…

Qt之饼图(Pie Graph)

[TOC](Qt之饼图(Pie Graph)) 饼图名为Pie Graph,用于显示一个数据系列中各项的大小与各项总和的比例。本文基于QtCharts实现饼图的显示。 1.实现过程 1.1环境配置 (1)首先想要使用QtCharts模块,需要在安装qt时选择勾选安装QtCha…

ThreadPoolExecutor线程池创建线程

线程池介绍 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源&#…

一站式uniapp优质源码项目模版交易平台的崛起与影响

一、引言 随着信息技术的飞速发展,软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通,对于开发者、企业以及项目团队而言,具有极其重要的意义。为满足市场对高质量源码资源的迫切需求,一站式uniapp优质源码项目模版…

在Ubuntu 18.04.6 LTS 交叉编译生成Windows 11下的gdb 8.1.1

1. 安装mingw sudo apt-get install mingw-w64 2. 下载 gdb 8.1.1源码 https://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz 解压命令 tar -xf gdb-8.1.1.tar.gz 进入目录,创建build目录: hq@hq:~/gdb-8.1.1/build$ 执行配置 ../confi

网盘挂载系统-知识资源系统-私域内容展示系统

系统介绍: 存储:一共支持约30款云盘存储,其中包括主流的(百度网盘、阿里云盘、夸克云盘、迅雷云盘、蓝奏云、天翼云盘),部分展示 以及特别的(一刻相册、对象存储、又拍云存储、SFTP、MEGA 网盘…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间,安装依赖:3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…