我是开放式GL和我的代码的初学者,当状态是3代码工作正常但当状态为1时,它不能绘制线。我想用一条线连接两个点。
请帮助我如何修复我的if(status==1)
语句以画一条线。
这是我的代码:
void myMouse(int button, int state, int x, int y)
{
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
if (((x>=30 && x<=70) && ((wh-y)>=400 && (wh-y)<=440)))
status=1;//draw line
else if((x>=30 && x<=70) && ((wh-y)>=280 && (wh-y)<=320))
status=2;
else if((x>=30 && x<=70) && ((wh-y)>=520 && (wh-y)<=560))
status=3;//clear page
else if((x>=30 && x<=70) && ((wh-y)>=160 && (wh-y)<=200))
status=4;
else if((x>=30 && x<=70) && ((wh-y)>=40 && (wh-y)<=80))
status=5;
else drawPoint(x,y);
}
}
void drawPoint(int x,int y)
{
if(status==1)
{
glBegin(GL_LINES);
glVertex2i(x,y);
//glVertex2i(x,y);
glEnd();
glFlush();
}
if(status==3){
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
else{
y=wh-y;
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
glFlush();}
}
答案 0 :(得分:1)
您还可以检查函数myMouse()
中的状态条件。然后你可以获得新的点并将它们存储在二维数组中。
如果将x和y存储在数组中,则可以访问先前的点,然后可以绘制一条线。
if(status==1)
{
glBegin(GL_LINES);
glVertex2i(arrx[i],arry[j]);
glVertex2i(arrx[I-1],arry[j-1]);
glEnd();
glFlush();
}
答案 1 :(得分:0)
OpenGL中的默认可见范围是每个轴上的[-1到1]。看起来像是在像素坐标中指定x和y,这要求您使用投影矩阵(很可能是正交矩阵)。代码看起来像这样:
glMatrixMode(GL_PROJECTION);
glOrtho(0, width, height, 0, 0, 1);
此外,你仍然需要该线的第二点(正如Reto Koradi所说)。我不知道这是否有意,但是当状态为1时,else分支也将被执行。