2013-02-20 17 views
1

我做了一個小的lwjgl編​​程,我可以通過按下按鈕來創建框。但是,我似乎無法在for循環中繪製多個四邊形。如何繪製列表中包含的多個glQuads?

這裏是我的代碼:我有一個框類,這樣我可以處理許多箱子

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能做到這一點嗎?

如果需要,我可以發佈完整的代碼。

回答

2

這不是GL只渲染一個四邊形,而是你的代碼只定義一個四邊形,然後渲染它的'n'個副本。

此:

static int xPos, yPos, boxWide, boxHigh; 

聲明你的機器參數爲靜態的 - 這意味着它們是由一箱的所有實例共享。

+0

哦。我在印象之下,靜態字段只被...的成員共享,沒關係。謝謝,並且您設法清除了我對java的一個巨大誤解! – pipsqueaker117 2013-02-20 21:50:06

相關問題