我正在渲染由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] 删除。
我来说两句