1

我正在用 Java 中的 LWJGL 和 OpenGL 制作一个简单的 2D 游戏,但我似乎无法渲染超过一个四边形。

我的Squares主类中有一个数组列表,如果列表中有多个 Square,它只会渲染列表中的最后一个,而无法渲染其他的(我调试并打印了 Square 名称,这表明它正在迭代它们正确,但出于某种原因决定不渲染任何一个,但最后一个)。所以我唯一能想到的是我的SquareDraw方法有问题(因为我只使用该方法来渲染我的四边形),或者我的 OpenGL 设置代码。

如果它有帮助,我的代码看起来非常像这个视频中的内容,因为我一直在很大程度上关注这个和 lwjgl 上的 wiki 页面:http ://www.youtube.com/watch?v=EjbOjio_pC4

方形类:

package dasting;

import org.lwjgl.*; //lwjgl engine
import org.lwjgl.opengl.*; //opengl
import static org.lwjgl.opengl.GL11.*; //Dunno yet, youtube said so
import org.lwjgl.LWJGLException; //Allows tries and catches with exception handling for LWJGL (IMPORTANT SHIT)
import java.util.Random; 

public class Square {

private int x1, x2, y1, y2, roomHeight, roomWidth;

//constructor takes the position values and width and height of room for boundary checks
Square(int X1, int X2, int Y2, int Y1, int rmWidth, int rmHeight) { 
    x1 = X1; //initialising the point values
    x2 = X2;
    y2 = Y2;
    y1 = Y1;
    roomHeight = rmHeight;
    roomWidth = rmWidth;
}

public void draw() { //draw method
    //Rendering random stuff example code. Also moves the square
    glClear(GL_COLOR_BUFFER_BIT);

    //Render quad
    glBegin(GL_QUADS);
        glVertex2i(x1, y1);
        glVertex2i(x2, y1);
        glVertex2i(x2, y2);
        glVertex2i(x1, y2);
    glEnd();
    }
}

这是我认为在我的主课中可能有问题的openGl设置:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, roomWidth, roomHeight, 0, 1, -1); 
glMatrixMode(GL_MODELVIEW);
4

1 回答 1

2

您应该调用glClear每一帧,而不是每次绘制Square. 将调用glClear移出draw函数并将其放在绘图循环的开头。

于 2013-03-19T19:03:37.133 回答