学习100个Unity Shader (18) --- 几何着色器(Geometry Shader)

文章目录

  • 概述
  • 编写格式
  • 举例
  • 应用举例(用预制体球的每个顶点画一个立方体)
  • 参考

概述

  1. vertex shader --> [geometry shader] --> fragment shader。[]: 可选阶段。
  2. 输入图元 —> geometry shader —> 其他图元

编写格式

[maxcertexcount(N)]
void ShaderName (PrimitiveType InputVertexType InputName[NumElements], 
inout StreamOutputObjectVertexType) OutputName){// 几何着色器具体实现}

几何着色器每次输出的顶点个数都可能不同,[maxvertexcount(N)]用来指定几何着色器单次调用所输出的顶点数量最大值,输出点=1,输出线=2,输出三角形=3。
PrimitiveType图元类型:

图元类型
point输入图元拓扑类型为点列表
line输入图元拓扑类型为线列表或线条带
triangle输入的图元拓扑类型为三角形列表或三角形带
lineadj输入的图元拓扑类型为线条列表/带及其邻接图元
triangleadj输入的图元为三角形列表/带及其邻接图元

StreamOutputObjectVertexType 输出流类型

输出流类型
PointStream一系列顶点所定义的点列表
LineStream一系列顶点所定义的线条带
TriangleStream一系列顶点所定义的三角形带

举例

//The data structure from the application to the vertex shader.
struct a2v  
{  float4 vertex : POSITION;  float2 uv : TEXCOORD0;  
};  //The data structure from the vertex shader to the geometry shader.
struct v2g  
{  float4 vertex : POSITION;  float2 uv : TEXCOORD0;  
};//The data structure from the geometry shader to the fragment shader.
struct g2f
{  float4 vertex : SV_POSITION;  float2 uv : TEXCOORD0;
}; 
[maxvertexcount(3)]  
void geom(triangle v2g input[3], inout TriangleStream<g2f> outStream)  
{  g2f o;for(int i = 0; i < 3; i++)  {  o.vertex = UnityObjectToClipPos(input[i].vertex);  o.uv = input[i].uv;  outStream.Append(o);  //Append函数用来将几何着色器的输出数据追加到一个现有的流中。   }  outStream.RestartStrip();  //输出流是三角,重置输出流
}

应用举例(用预制体球的每个顶点画一个立方体)

在这里插入图片描述

参考

Unity几何着色器详解
GITHUB-GeometryShaderCookbook

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

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

相关文章

什么是访问越界(C语言数组、指针、结构体成员访问越界)

在C语言中&#xff0c;访问越界&#xff08;Access Violation 或 Out-of-Bounds Access&#xff09;是指程序试图访问的内存位置超出了其合法或已分配的范围。这通常发生在数组、指针或其他内存结构的使用中。 案例&#xff1a; #include <stdio.h>//数组 //Visiting b…

基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据

背景 随着电子商务和健康产业的迅速发展&#xff0c;药品行业数据的分析和可视化变得愈发重要。基于Django的美团药品数据分析与可视化系统的研究背景凸显了对药品数据的深入挖掘和分析的需求。该系统不仅具备多用户功能&#xff0c;允许不同角色的用户进行数据管理和分析&…

python列表生成式的妙用:区间内奇数求和

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、案例背景 三、实现步骤 四、案例验证 五、总结 一、引言 在Python编程中&a…

Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口

目录 线程&#xff1a; 继承Thread类&#xff1a; 实现Runnable类&#xff1a; 实现Callable接口&#xff1a; 验证多线程&#xff1a; 线程&#xff1a; 定义&#xff1a;进程可以同时执行多个任务&#xff0c;每个任务就是线程。举个例子&#xff1a;一个Java程序&#…

力扣刷题--LCR 075. 数组的相对排序【简单】

题目描述 给定两个数组&#xff0c;arr1 和 arr2&#xff0c; arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序&#xff0c;使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。 …

实现UI显示在最上面的功能

同学们肯定遇到过UI被遮挡的情况&#xff0c;那如何让UI显示在最前面呢&#xff0c;先看效果 原理:UI的排序方式是和unityHierarchy窗口的层级顺序有关的&#xff0c;排序在下就越后显示&#xff0c;所以按照这个理论&#xff0c;当我们鼠标指到UI的时候把层级设置到最下层就好…

nacos(一) 安装

一 nacos 1.4.7安装 安装 nacos-server nacos官方下载 说明&#xff1a; 下载1.4.7和2.3.2版本,本专栏后续以1.4.7为例进行讲解补充&#xff1a; nacos-server服务端和nacos-client客户端附加&#xff1a; spring 版本、nacos-server、nacos-client版本要适配思考&#xf…

【Redis】Widows 和 Linux 下使用 Redis

Redis 简述 1.缓存 缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。 2.Redis Redis …

同元软控专业模型库系列—电气篇

一、引言 电气作为研究电能产生、传输、分配、使用和控制的专业领域&#xff0c;在航空航天、能源电力、船舶推进、轨道交通等众多行业中占据着举足轻重的地位&#xff0c;应用范围涉及电力工程、电子通信、自动化控制等&#xff0c;如电池充电管理芯片设计、航天器伺服系统、…

GitHub Copilot如何订阅使用

1.Copilot是什么 Copilot是由Github和OpenAI联合开发的一个基于人工智能大模型的代码写作工具。 我们都知道Github是世界上拥有开源项目及代码最多的一个平台&#xff0c;有了这么一个得天独厚的资源&#xff0c;Github联合OpenAI喂出了Copilot。经过不断地更新迭代&#xff…

Word整理论文参考文献

1.安装Zotero软件 2.安装Zotero的Chrome网站插件&#xff0c;并将插件固定到浏览器 3.安装Word的Zotero插件 4.在DBLP网站https://dblp.org/search 搜索需要添加的参考文献->点击BibTex->点击网页右上角的Zotero符号&#xff08;即第二步所指的符号&#xff09;->至…

红队攻防渗透技术实战流程:红队目标上线之webshell工具魔改

红队攻防免杀实战 1. 红队目标上线-Webshell免杀-源码魔改1.2 Webshell-代码混淆&流量绕过&工具原理1.2 通过对冰蝎的数据包分析:1.2魔改冰蝎-JAR反编译打包构建1.2魔改冰蝎-防识别-打乱特征指纹1.2魔改冰蝎-防查杀-新增加密协议1. 红队目标上线-Webshell免杀-源码魔改…

[转载]同一台电脑同时使用GitHub和GitLab

原文地址&#xff1a;https://developer.aliyun.com/article/893801 简介&#xff1a; 工作中我们有时可能会在同一台电脑上使用多个git账号&#xff0c;例如&#xff1a;公司的gitLab账号&#xff0c;个人的gitHub账号。怎样才能在使用gitlab与github时&#xff0c;切换成对应…

民国漫画杂志《时代漫画》第27期.PDF

时代漫画27.PDF: https://url03.ctfile.com/f/1779803-1248635258-b6a842?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

一键开关机电路

大家好&#xff0c;我是记得诚。 球友问了一个问题&#xff0c;是这样的。 诚哥&#xff0c;请教一个问题。这个一键开关机有没有问题&#xff0c;或者有哪些改进的地方。 1、内部电源供电&#xff0c;可外接适配器。 2、VBAT接锂电池&#xff0c;VBUS接电源适配器。 3、BU…

Java毕业设计 基于springboot vue考勤管理系统

Java毕业设计 基于springboot vue考勤管理系统 SpringBoot 考勤管理系统 功能介绍 员工 登录 个人中心 修改密码 个人信息 员工请假管理 员工出差管理 薪资管理 员工签到管理 公告管理 管理员 登录 个人中心 修改密码 个人信息 员工管理 员工请假管理 员工出差管理 薪资管理…

openEuler 22.03 LTS SP3源码编译部署OpenStack-Caracal遇到的问题解决

openEuler 22.03 LTS SP3源码编译部署OpenStack-Caracal遇到的问题解决 问题一 给路由设置外部网关后Status为DOWN&#xff08;使用的是OVN&#xff09;问题描述临时的解决办法永久解决办法&#xff08;修改源代码&#xff09; 问题二 分离卷一直显示分离中问题描述解决办法&am…

spring boot3整合邮件服务实现邮件发送功能

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 内容概要 开通服务 依赖引入 配置属性 创建邮件发送工具类 测试 最近发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家…

c++ 里重解释转换之于引用 reinterpret_cast< long >

今天遇到了这一很新奇的写法。模糊中记得王老师也这么讲过。c 里四大转换。把数据重解释为原来数据的引用。虽然也可以直接定义对变量的引用。测试如下&#xff1a; 咱们从反汇编再了解下 c 编译器是怎么处理这种写法的&#xff1a; 谢谢

[合集] MySQL 8.x 系列文章清单

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 从去年7月到现在&#xff0c;自 MySQL 发版模型变更后&#xff0c;已经发布了四个版本&#xff0c;意味着 MySQL 8.x 系列进入了长期支持状态。 当然&#xff0c;目前主要推荐的版本依旧是 MySQ…