我正在开发一个项目,该项目可以模拟Microsoft Paint中看到的许多功能。为此,我使用了glutMotionFunc来控制当鼠标拖动发生时绘制给定形状的画笔。它会更改颜色,旋转等。我希望每次按'b'时都可以循环画笔笔触形状,但是我无法在情况'b'中进行迭代以跟踪被按下的次数。
我也不确定即使在这种情况下我的mouseMove函数也能识别出更改是画笔笔触。
void keyboard ( unsigned char key, int x, int y )
{
Paint_begin newPaint;
int bPressed = 0;
switch ( key )
{
case 'b':
bPressed=bPressed+1;
newPaint.readyPaint(true);
printf("bPressed: %d\n", bPressed);
newPaint.setShape(bPressed);
break;
//... extra code unrelated to my problem
}
glutPostRedisplay ( );
}
和mouseMove函数(运动功能):
void mouseMove ( int x, int y )
{
Paint_begin paintNew;
if(paintNew.shape==0){
glRecti(x,y, x+paintNew.sizeDraw, y+paintNew.sizeDraw);
}
glFlush();
if(paintNew.shape==1){
glBegin(GL_TRIANGLES);
glVertex2f(x, y+paintNew.sizeDraw);
glVertex2f(x+paintNew.sizeDraw, y);
glVertex2f(x, y);
glEnd();
}
//glutPostRedisplay ( );
}
还有Paint_begin类
class Paint_begin{
public:
static int sizeDraw, readyP, shape;
void readyPaint(int paint){
sizeDraw = 1;
readyP = paint;
shape = 0;
}
void setShape(int shape){
shape = shape;
}
int getShape(){
return shape;
}
};
矩形可以正常工作,但我担心这仅仅是因为shape变量已初始化为0。跟踪printf语句中的“ bPressed”会产生1,1,1,无论它实际被按下了多少次。
最佳答案
如果要跟踪按下“ b”按钮的次数,则有两种可能性:
void keyboard ( unsigned char key, int x, int y )
{
static int bPressed = 0;
//...
}
这样,该变量仅初始化一次,然后在每次调用函数时将存储先前的值。
另一种选择是将
bPressed
声明为全局变量,以便在调用方法时不初始化其值。关于c++ - OpenGL“画图”程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9021932/