在OpenGL中使用GL_LINES时如何只渲染两个端点?

时间:2016-05-07 09:13:51

标签: opengl

我正在使用OpenGL处理​​拾取功能。我知道当模型是三角形时,我可以使用glPolygonMode(GL_FRONT_AND_BACK, GL_Lines);渲染3行: 1

我也知道当模型是三角形时,我可以使用glPolygonMode(GL_FRONT_AND_BACK, GL_Points);渲染3个点:

2

现在我遇到了这个问题:在使用GL_LINES渲染一行时,我无法找到渲染2个端点的方法。 是否有与glPolygonMode()相似的内容可以控制GL_LINES的工作方式?

4 个答案:

答案 0 :(得分:1)

GL_LINES描述了在这种情况下如何填充基元(三角形)。

即使它被表示为一系列线条或未连接的点而不是填充的三角形,您也可以模糊地制作原始图元。但是,对于线条,如果您将它们简化为零,只会指出您需要的重要信息,以便了解您所看到的内容(这些点是如何连接的)。

根据这一点,线条模式没有任何意义,而真正存在的最接近的东西可能是线条点画。

只需使用GL_POINTS作为原语,您显然不需要为您想要完成的任何内容添加行。

答案 1 :(得分:0)

  

是否有类似function MyCtrl($scope, socket) { socket.on('message', function(data) { ... }); }; 的内容可以控制glPolygonMode()的工作方式?

总而言之:不。您必须自己实施(仅提交端点)。

答案 2 :(得分:0)

您可以将其呈现为GL_POINTS primitives而非GL_LINES。当然,您需要为它们应用一个点大小,而不仅仅是一个点。

答案 3 :(得分:0)

正如已经指出的那样,没有glLineMode()调用可以让你用简单的状态设置将行转换成点。

如果您可以更改绘制调用,当您想绘制点时,显然可以使用GL_POINTS作为基本类型。

与其他答案所声称的相反,我相信有一种方法可以做到这一点,即使假设您无法修改绘制调用。您可以使用将线条作为输入基元类型的几何着色器,并将其指定为输出基元类型。几何着色器可能如下所示:

layout(lines) in;
layout(points, max_vertices = 2) out;

void main() {
    gl_Position = gl_in[0].gl_Position;
    EmitVertex();

    gl_Position = gl_in[0].gl_Position;
    EmitVertex();

    EndPrimitive();
}