如何在屏幕上进行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绘制窗口,你想知道。
答案 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++;
}
更新:好的,你说广场用你的坐标绘制得很好,所以你可能不会改变它。但是在绘制循环之外定义变量是必不可少的。告诉我这是否适合你。