在OpenGL的顶点着色器中获取元素ID

Petwoip

我正在渲染由OpenGL中的三角形组成的线。

现在,我可以在以下位置工作:

顶点缓冲区: {v0, v1, v2, v3}

索引缓冲区(三角带): {0, 1, 2, 3}

在此处输入图片说明

最上面的图像是传递到顶点着色器的原始数据,最下面的图像是在对v1和v3应用偏移(使用vertex属性)之后输出的顶点着色器。

我的目标是对直线上的每个点使用一个顶点,并以其他方式生成偏移量。我当时在看gl_VertexID,但我想要的更像是元素ID。这是我想要的设置:

顶点缓冲区: {v0, v2}

索引缓冲区(三角带): {0, 0, 1, 1}

并使用虚构gl_ElementID % 2来偏移其他所有顶点。

我试图避免使用几何着色器或其他顶点属性。有什么办法吗?我愿意接受完全不同的想法。

我可以想到一种避免几何着色器并仍使用紧凑表示形式的方法:实例渲染只需绘制一个四边形的许多实例(如三角形带),然后通过glVertexAttribDivisor()将这两个位置定义为每个实例的属性

请注意,您根本不需要带有4个顶点的“模板四边形”。从概念上讲,您仅需要两个属性,一个用于您的起点,一个用于您的终点。(当然,如果您以2D模式工作,则可以将其融合为一个vec4)。在每次顶点着色器调用中,您都可以访问这两个点,并且可以基于该点和的值gl_VertexID(仅在0到3的范围内)来构造最终的顶点位置这样,您就可以完全避免要瞄准的每个线段有两个点的顶点阵列布局,而仍然只需要一个绘制调用和一个顶点着色器即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

OpenGL顶点着色器处理

如何从顶点着色器中的vec3获取值?OpenGL 3.3

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

OpenGL-从顶点着色器访问缓冲区中的下3个顶点

顶点着色器中的广告牌顶点

丢弃Unity的顶点着色器中的顶点

OpenGL调试,如何查看顶点着色器的结果

OpenGL顶点着色器变换,对象消失

OpenGL奇怪的顶点着色器问题

用于针孔相机模型的OpenGL顶点着色器

OpenGL ES 2.0 矢量转换无法通过矩阵乘法(在顶点着色器中)工作

OpenGL无法将变量从顶点着色器发送到片段着色器

顶点着色器中的Phong照明

像素和顶点着色器中的缩放问题

顶点着色器中的边界框

从顶点着色器读取变量以在 webgl 中呈现

Swift 5中的金属顶点着色器警告

在顶点着色器中对复数进行运算

无法在Maya插件中编译顶点着色器

顶点着色器属性位置中的损坏数据

顶点着色器与片段着色器

自定义和通用顶点着色器属性在OpenGL和OpenGL ES中的使用

哪些OpenGL函数会在顶点着色器之前修改顶点位置?

OpenGL-GLSL绘制3D GL_LINES顶点着色器与顶点

OpenGL错误地传递了顶点着色器的顶点

OpenGL程序链接状态检查期间“顶点着色器中没有主定义”

尝试在Win32 OpenGL中使用着色器,但顶点着色器什么也没画

如何通过顶点着色器将数据从顶点着色器传递到片段着色器

通过顶点attrib指针将颜色坐标传递到顶点着色器中