我制作了一个小的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会这样做吗?
如果需要,我可以发布完整的代码。
答案 0 :(得分:2)
不是GL只渲染一个四边形,而是你的代码只定义一个四边形,然后渲染它的'n'个副本。
此:
static int xPos, yPos, boxWide, boxHigh;
将您的盒子参数声明为静态 - 这意味着它们由盒子的所有实例共享。