>我正在制作一个简单的 2D 绘图程序,其中我有一个顶点数组(例如 a1,a2,a3,.....),将使用 GL_LINE_STRIP 绘制。问题是,假设有 3 个连续的顶点:p1、p2、p3,现在我希望如果(p2==某个特定的顶点值),那么GL_LINE_STRIP应该在 p1 结束,一个新的GL_LINE_STRIP从 p3 开始,忽略 p2。我想在条带的 p2 休息一下。我该怎么做??PS:我尝试在线条循环中制作(线宽 = 0 在 p2 处),但发现由于 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);
}
的问题没错,你想在顶点处停止行行程(如果它是一个特定的值),然后在下一个顶点开始一个新的。(如果我误解了,请纠正我)
在要连接的最后一个顶点之后调用glEnd()
,并在要启动新条带时启动新glBegin()
。
至于宽度部分,您必须在调用glBegin()
之前设置宽度。行行程 (afaik) 不能像您所说的那样在绘制状态下更改其宽度。您必须结束绘制调用,更改宽度,返回 1 个顶点并开始新的绘制调用。