如何绘制列表中包含的多个glQuads?

时间:2013-02-20 20:47:25

标签: java opengl lwjgl

我制作了一个小的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会这样做吗?

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

1 个答案:

答案 0 :(得分:2)

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

此:

static int xPos, yPos, boxWide, boxHigh;

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