1

我做了一个小 lwjgl 程序,在其中我可以通过按一个按钮来创建盒子。但是,我似乎无法在 for 循环中绘制多个四边形。

这是我的代码:我有一个盒子类,这样我就可以处理很多盒子

package LWJGL_Learn;

import java.util.Random;
import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.opengl.*;
import org.lwjgl.*;

public class Box {

    static int xPos, yPos, boxWide, boxHigh;
    public Box(int width, int height) {
        Random ran = new Random();
        xPos = ran.nextInt(width);
        yPos = ran.nextInt(height);
        boxWide = ran.nextInt(40)+20;
        boxHigh = ran.nextInt(40)+20;
    }
    public void draw() {
            glVertex2f(xPos, yPos);
            glVertex2f(xPos + boxWide, yPos);
            glVertex2f(xPos + boxWide, yPos + boxHigh);
            glVertex2f(xPos, yPos + boxHigh);   
    }
}

然后,在我的主文件中,我有一个 LinkedList 存储我的盒子类,初始化为

static LinkedList<Box> boxes = new LinkedList<Box>();

实际呈现它的代码如下:

glBegin(GL11.GL_QUADS);
for (int x = 0; x < boxes.size(); x++) {
    boxes.get(x).draw();
}
glEnd();

这段代码的问题在于它似乎只绘制了最近添加到列表中的框。我不确定为什么会这样,但是当我添加代码以在执行结束时打印框列表时,每次都会出现正确大小的列表。我假设这意味着每个框都在 for 循环中迭代,这意味着在代码中的某处,在绘制下一个框之前,前一个框已从屏幕上清除。

我认为。你们能纠正我的代码并向我解释为什么openGL会这样做吗?

如果需要,我可以发布完整的代码。

4

1 回答 1

2

不是 GL 只渲染一个四边形,而是您的代码只定义一个四边形,然后渲染它的“n”个副本。

这:

static int xPos, yPos, boxWide, boxHigh;

将您的盒子参数声明为静态的 - 这意味着它们由盒子的所有实例共享。

于 2013-02-20T20:54:48.043 回答