2011-03-28 91 views
0

是否可以使用GL_TRIANGLES用GLSL绘制线条?用GLSL绘制线条

为什么我问的原因是我试图用adobes土丘绘制一条线,它只绘制三角形。

干杯

回答

3

如果设置边缘渲染上,只需战平点1和3的三角形在相同的位置。 它效率不高,但它的工作原理。

+0

在现代OpenGL和OpenGL ES 2.0 afaik中不可能。 – Bim 2017-06-01 08:31:21

0

如果可以,请使用几何着色器。通过两个顶点和一个线宽,通过移动顶点生成四个点,形成两个三角形,渲染并完成...但是,使用三角形绘制宽几何着色器也可以在OpenGL ES 2.0中完成(没有几何图形着色器)和仅使用顶点着色器的桌面OpenGL:

生成顶点数据,以便复制每行的顶点(每行4个顶点)。对于每个顶点,为上一行和下一行的顶点传递两个额外的vec2/vec3属性(用于计算正确的连线)或者只需传递vec2/vec3线方向。还要添加一个浮点顶点属性,该属性表示一个“正常”,即移动每个顶点的方向。对于一条线的一个端点(现在使用两个顶点),将“法线”设置为一个方向,并将重复的顶点设置为相反的方向。生成这些顶点的三角形(通过索引或其他)并使用GL_TRIANGLES进行渲染。

在顶点着色器中,使用顶点和上一个或下一个顶点来计算行方向和(在2D情况下简单)生成垂直于它的向量。乘以你作为顶点属性传递的“正常”。这会将您的线条“移到两边”,从而生成实际的三角形。生成具有正确像素尺寸的线条在2D中很简单(虽然具有均匀的缩放比例,但也可能是非均匀缩放比例) - 使用模型视图矩阵中的比例因子(例如modelView [0] [0]), )并在顶点着色器中将线宽除以它。在3D中,这涉及更多一点...

对技术here,动画示例here和源代码here有很好的解释。