2

我有一个着色器,可以在四边形内以程序方式生成几何形状。本质上,您在启用此片段着色器的情况下渲染一个四边形,它会计算哪些片段位于形状的边界以及discard其他所有片段。

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

当我在片段着色器中时,有什么方法可以只做一次,通过某种方法来获取当前四边形的左上角和右下角顶点的坐标,这样我就可以简单地给出顶点数据到 OpenGL 一次并让着色器计算适合四边形的最大形状?

4

3 回答 3

1

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

几何着色器将为四边形生成额外的顶点并将大小传递给片段着色器。

根据您的具体操作,您还可以使用点精灵并使用它们所具有的隐式坐标 ( gl_PointCoord)。但是,点精灵有一个最大尺寸(可以通过GL_POINT_SIZE_RANGE和查询GL_POINT_SIZE_GRANULARITY)。

于 2013-01-04T20:31:49.010 回答
1

你可以自己拉顶点。您可以使用顶点数据创建统一缓冲区或纹理缓冲区,然后在片段着色器中访问此缓冲区。在顶点着色器中,为了知道要输出什么顶点,您可以使用内置变量 gl_VertexID

于 2013-05-14T15:20:40.040 回答
0

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

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

于 2013-01-05T09:54:24.393 回答