在OpenGL中如何将原语渲染为线框?


当前回答

如果您正在使用固定的管道(OpenGL < 3.3)或兼容性配置文件,您可以使用

//Turn on wireframe mode
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

//Draw the scene with polygons as lines (wireframe)
renderScene();

//Turn off wireframe mode
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

在这种情况下,你可以通过调用glLineWidth来改变行宽

否则,你需要在你的绘制方法(glDrawElements, glDrawArrays等)中改变多边形模式,你可能会得到一些粗略的结果,因为你的顶点数据是三角形的,你是输出线。为了获得最好的效果,可以考虑使用几何着色器或为线框创建新数据。

其他回答

从http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/ogladv/tut5

// Turn on wireframe mode
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);

// Draw the box
DrawBox();

// Turn off wireframe mode
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GL_FILL);

如果你处理的是OpenGL ES 2.0,你可以从中选择一个绘制模式常量

GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES,来画线,

GL_POINTS(如果您只需要绘制顶点),或者

GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN和gl_triangle来绘制填充三角形

作为你的第一个论点

glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices)

or

glDrawArrays(GLenum模式,GLint优先,GLsizei计数)调用。

使用这个函数:

void glPolygonMode(GLenum face, GLenum mode);

face:指定模式适用的多边形面。多边形的正面可以是GL_FRONT,背面可以是GL_BACK,两者都可以是GL_FRONT_AND_BACK。

mode:定义了三种模式。

GL_POINT:标记为边界边起点的多边形顶点被绘制为点。 GL_LINE:多边形的边界边被绘制为线段。(你的目标) GL_FILL:填充多边形内部。

glPolygonMode控制图形管道中栅格化多边形的解释。

要了解更多信息,请参阅khronos组中的OpenGL参考页。

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );

要打开电源,

glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

回归正常。

注意,如果启用了纹理映射和照明,它们仍然会应用到线框线上,这看起来可能很奇怪。

在非抗锯齿渲染目标上绘制抗锯齿线的一个好而简单的方法是绘制宽度为4像素的矩形,纹理为1x4, alpha通道值为{0,1,1,0。},并使用mip-mapping关闭的线性过滤。这将使线条2像素厚,但你可以改变不同厚度的纹理。 这比重力计算更快更简单。