如何在片段着色器中获取当前多边形的顶点?

时间:2013-01-04 05:48:46

标签: opengl glsl

我有一个着色器可以在程序中生成四边形内的几何形状。基本上,您使用此片段着色器处于活动状态时渲染四边形,并计算形状边界上的哪些片段以及discard其他所有片段。

问题是四边形的尺寸。目前,我必须将顶点数据传递两次,一次传递给VBO,第二次传递给着色器作为uniform变量,因此它知道它应该创建多大的形状。

当我在片段着色器中时,通过某种方式获取当前四边形的左上角和右下角顶点的坐标,有没有办法只需要这样做一次,这样我就可以只需将顶点数据提供给OpenGL一次,让着色器计算出最适合四边形的形状吗?

3 个答案:

答案 0 :(得分:1)

我想你可能想要使用几何着色器。每个顶点将由四边形的一个角的位置(2-4个值的向量)和四边形的大小(可以是单个值或最多9个,取决于您需要四边形的一般情况)。

几何着色器将为四边形生成其他顶点,并将大小传递给片段着色器。

根据您正在做的事情,您也可以使用点精灵并使用他们拥有的隐式坐标(gl_PointCoord)。但是,点精灵具有最大尺寸(可以通过GL_POINT_SIZE_RANGEGL_POINT_SIZE_GRANULARITY查询。)

答案 1 :(得分:1)

你可以自己拉顶点。您可以使用顶点数据创建Uniform Buffer或Texture Buffer,并只在片段着色器中访问此缓冲区。在顶点着色器中,为了知道输出什么顶点,你可以使用内置变量gl_VertexID

答案 2 :(得分:0)

我将四边形的左上角和右下角顶点作为每个顶点的两个额外输入属性。四边形本身被渲染为三角形。

在顶点着色器中,将两个输出属性声明为flat(因此它们不会被插值)并将输入属性复制到这些输出。