我正在使用OpenGL处理拾取功能。我知道当模型是三角形时,我可以使用glPolygonMode(GL_FRONT_AND_BACK, GL_Lines);
渲染3行:
我也知道当模型是三角形时,我可以使用glPolygonMode(GL_FRONT_AND_BACK, GL_Points);
渲染3个点:
现在我遇到了这个问题:在使用GL_LINES
渲染一行时,我无法找到渲染2个端点的方法。
是否有与glPolygonMode()
相似的内容可以控制GL_LINES
的工作方式?
答案 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();
}