几何着色器 Opengl Geometry Shaders 笔记
来源:互联网 发布:数据挖掘 用户画像 编辑:程序博客网 时间:2024/05/29 04:38
Geometry Shaders (简称:GS)笔记
这个应该翻译为几何着色器吧,这个Shader可以做很多特效,这里先记录,并记熟一些要点,然后在用来做一些特效。
这个属于Opengl - 主要是shaders,的学习性笔记了,记录的比较随意,并非tutorial式的东西。
1. A geometry shader has access to all of the vertices in a primitive. GS是每个primitirve就出发一次的shader,故此一个GS(每次触发的GS)可以访问一个primitive中的所有vertices(顶点);GS可以改变primitive的类型,可以创建和销毁primitives。
One Primitive 对应(触发) One Geometry shader.
最简单GS例子:
#version 450 corelayout (triangles) in;layout(triangle_strip) out;layout (max_vertices = 3) out;void main(){ int i; int n = gl_in.length(); for (i = 0; i < n; ++i) { gl_Position = gl_in[i].gl_Position; EmitVertex(); } EndPrimitive();}
layout (triangles) in; 标明了输入GS的是什么primitive, 这里表示是triangles;GS的primitive输入类型必须和VS或者TS,即GS的上一个shader的输出类型一致,否则不正常工作。
layout (triangle_strip) out; 表明GS输出是什么primitive,这里是triangle_strip;GS的输出类型必须是什么strip的,否则没有图像输出。
layout (max_vertices = 3) out; 表明GS输出最大是多少个vertices,这个值如果需要增加vertices的时候,可以是max_vertices > triangle_strip(vertices number),也就是说GS可以增加渲染顶点。
EmitVertex() 是一个发出vertex的函数,就是告诉Opengl,已经设置了这个vertex相关数值了,请保持这个vertex;
EndPrimitive()函数是最终等所有primitive的vertex数值都已经设置好了,告诉Opengl这个primitive已经设置好了,请保存好。下一步发给fragment shader。
如果最终primitive的的vertex数量少于应有的数量,比如这里输出shi triangle_strip那么数量不应该少于3,如果少于3,那么这个primitive就不会被渲染;
如果多3个,那么就是增加了顶点,会继续渲染多于一个primitive。
这两个函数的特征就决定 了GS可以销毁顶点,也可以增加primitive,当然也可以修改vertex,从而修改primitive。
加上layout (triangle_strip) out;这个设置,GS也可以修改输出primitive类型。
所有总结起来GS有四大功能:
1 销毁顶点 -- 从而销毁primitive
2 增加primitive
3 修改verte -- 从而修改primitive
4 修改primitive类型
也就是说GS的功能十分强大,发挥我们的想象力,可以创建很多强大的特效,比如:
1. 模型直接爆炸,三角形碎片往外飞
2. 画出模型的三角形法线
3. 模型变形
4. GS隐藏一些模型,背面剪切,这些功能也可以在GS中做,或者OpenGL自动背面剪切了,不过不知道在GS中做,会不会提高运行速度,这点我需要继续调查一下。当然,如果一定要使用到GS,那么在GS中做这些优化,效果肯定是提升的。根据KlayGE引擎提到“不争气的geometry shader” http://www.klayge.org/2011/07/26/%E4%B8%8D%E4%BA%89%E6%B0%94%E7%9A%84geometry-shader/ ,打开gs就会有一定性能损耗,不过到现在Opengl又经过这么多版本迭代之后,性能肯定更加强大了。
这些效果,我后面会慢慢实现,并贴上来。
本文主要参照:opengl superbible 和opengl wiki
阅读全文
0 0
- 几何着色器 Opengl Geometry Shaders 笔记
- OpenGL 几何着色器 Geometry Shader 初探
- OpenGL学习:几何着色器(geometry shader)
- OpenGL学习脚印:几何着色器(geometry shader)
- 最简单的几何着色器(Geometry Shader)【OpenGL】【GLSL】
- 基于几何着色器的模型“爆炸”效果(Geometry Shader)【OpenGL】【GLSL】
- Geometry Shader 几何着色渲染
- OpenGL核心技术之几何着色器
- opengl几何着色器实现爆破效果
- opengl glsl 几何着色器 1
- 笔记:OpenGL SuperBible - Shaders
- 【Unity Shaders】学习笔记之固定着色器命令(二)
- 【Unity Shaders】学习笔记之固定着色器命令(二)
- 【Unity Shaders】学习笔记之表面着色器(三)
- Unity Shaders表面着色器
- OpenGL 几何着色器 传入点,绘制三角形
- 【OpenGL4.0】GLSL-几何着色器详解和实例(GS:Geometry Shader)
- 【OpenGL4.0】GLSL-几何着色器详解和实例(GS:Geometry Shader)
- 怎么查看当前系统中每个IP的连接数,怎么查看当前磁盘的IO,怎么查看当前网络的IO?
- springboot + activiti + modeler
- 算法笔记 //14_数字三角形问题
- 深度学习:神经网络
- 简单描述CDN加速原理
- 几何着色器 Opengl Geometry Shaders 笔记
- ECG和BCG的研究
- 超长数没用的零
- python -- 输入行数然后打印三角形
- HDU__1003Max Sum(最大连续子序列和)
- 创建用户congzhongzhi,使之可以管理数据库congzhongzhi
- 驱动学习的准备工作(1)
- iOS 转场动画简单实现 (push)
- 不退出数据库,完成备份congzhongzhi数据库