操纵GL_LINE_STRIP中的行

时间:2016-03-08 14:38:29

标签: opengl graphics opengl-es

我正在制作一个简单的2d绘图程序,其中我有一个顶点数组(比如a1,a2,a3,.....),这些顶点将使用GL_LINE_STRIP绘制。问题是,说有3个连续顶点:p1,p2,p3,现在我想要if(p2 ==一些特定的顶点值),那么GL_LINE_STRIP应该在p1结束,新的GL_LINE_STRIP从p3开始,忽略p2。我想在地带的p2休息一下。我怎么做?? PS:我尝试在线条的循环中在p2处使用线宽= 0,但发现由于opengl是一个状态机,我们无法改变glBegin和GLEnd中的宽度。任何其他替代球员???

这是一些失败的样本代码:

GLfloat thickness;
glBegin(GL_LINE_STRIP);
for(int i = 0; i < points.size(); i++)//points has all vertices stored...points is an array where each element is a structure containing x and y values
{
    if(points[i].x==randomPoint.x || points[i-1].x==randomPoint.x){//checking if it is equal to p2(i am only checking x coordinate,which is sufficient for me to know that this point is to be excluded)
        thickness = 0;

    }else {
        thickness = 4;

    }

    glLineWidth(thickness);
    glVertex2i(points[i].x, points[i].y);
}

1 个答案:

答案 0 :(得分:0)

如果我有正确的问题,你想要在一个顶点停止线条,如果它是一个特定的值,并在下一个顶点开始一个新的。 (如果我误解了,请纠正我)

在您想要连接的最后一个顶点之后调用glEnd(),并在您想要开始新的条带时开始新的glBegin()

对于宽度部分,您必须在调用glBegin()之前设置宽度。如你所说,线条(afaik)不能在绘制状态下改变它的宽度。您必须结束绘制调用,更改宽度,返回1个顶点并开始新的绘制调用。