C ++ OpenGL - 如何在屏幕上进行2D方形移动?

时间:2014-01-26 08:33:11

标签: c++ opengl

如何在屏幕上进行2D方形移动?我尝试移动它,但它只是停留在那里。

int x = 100;
int y = 100;
int width = 50;
int height = 50;

x += 1;

glBegin(GL_QUADS);
    glColor3f(r, g, b);
    glVertex2f(x, y);
    glVertex2f(x + width, y);
    glVertex2f(x + width, y + height);
    glVertex2f(x, y + height);
glEnd();

它加载得很好,它绘制了正方形和一切,但它只是不移动方块,我正在使用SDL绘制窗口,你想知道。

2 个答案:

答案 0 :(得分:0)

假设这是一个函数,问题是函数的开头不断地将x的值重置为100.将变量定义移出函数。举个例子:

int x = 100;
int y = 100;
int width = 50;
int height = 50;

function drawSquare()
{    
    x += 1;

    glBegin(GL_QUADS);
        glColor3f(r, g, b);
        glVertex2f(x, y);
        glVertex2f(x + width, y);
        glVertex2f(x + width, y + height);
        glVertex2f(x, y + height);
    glEnd();
}

每次调用该函数时,正方形的x都会增加1,因此会逐渐移动。

答案 1 :(得分:0)

OpenGL希望您发送0到1之间的相对坐标。此外,您每帧都会创建新变量,因此它们不能真正沿所有帧递增。

// box parameters in pixels
int boxleft = 100,
    boxbottom = 100;
int boxwidth = 50,
    boxheight = 50;

// window dimensions
int screenwidth = 1920,
    screenheight = 1080;

for(;;)
{
    // clear last frame
    glClear(GL_COLOR_BUFFER_BIT);

    // calculate screen space coordinates
    float left   = (float)boxleft / screenwidth,
          right  = left + (float)boxwidth / screenwidth,
          bottom = (float)boxbottom / screenheight,
          top    = bottom + (float)boxheight / screenheight;

    // draw the box
    glBegin(GL_QUADS);
        glColor3f(r, g, b);
        glVertex2f(left,  top);
        glVertex2f(right, top);
        glVertex2f(right, bottom);
        glVertex2f(left,  bottom);
    glEnd();

    // shift box for next frame
    boxleft++;
}

更新:好的,你说广场用你的坐标绘制得很好,所以你可能不会改变它。但是在绘制循环之外定义变量是必不可少的。告诉我这是否适合你。