在OpenGL中如何将原语渲染为线框?
当前回答
使用这个函数:
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参考页。
其他回答
最简单的方法是将原语绘制为GL_LINE_STRIP。
glBegin(GL_LINE_STRIP);
/* Draw vertices here */
glEnd();
如果你处理的是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计数)调用。
你可以这样使用供过于求的库:
对于球面: glutWireSphere(半径20 20); 圆柱体: GLUquadric *quadratic = gluNewQuadric(); GLU_LINE gluQuadricDrawStyle(二次); gluCylinder(二次,1,1,1,12日1); 对于立方体: glutWireCube (1.5);
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
要打开电源,
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
回归正常。
注意,如果启用了纹理映射和照明,它们仍然会应用到线框线上,这看起来可能很奇怪。
从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);