LWJGL glTranslate做了奇怪的事情

时间:2013-02-27 12:42:38

标签: java opengl draw lwjgl tile

这是我遇到的一个大问题。

我正在尝试使用glTranslate渲染多个图块但是当我用x,y坐标调用我的绘图函数时,图块间隔很奇怪(我不想要空格)。

以下是发生的事情。

Drawing multiple tiles but having problems

这是我的代码:

绘制:

public void draw(float Xa, float Ya) {

    GL11.glTranslatef(Xa, Ya, 0);


    if(hasTexture) {
    Texture.bind();

    GL11.glBegin(GL11.GL_QUADS);
        GL11.glColor3f(0.5f, 0.5f, 1);
        GL11.glTexCoord2f(0, 0);
        GL11.glVertex2f(0, 0);
        GL11.glTexCoord2f(0, 1);
        GL11.glVertex2f(0, S);
        GL11.glTexCoord2f(1, 1);
        GL11.glVertex2f(S, S);
        GL11.glTexCoord2f(1, 0);
        GL11.glVertex2f(S, 0);

        GL11.glEnd();
    }

和我的渲染代码:

public void a() throws IOException {
    GL11.glTranslatef(0, 0, -10);
    int x = 0;
    while (x < World.BLOCKS_WIDTH - 1) {
        int y = 0;
        while (y < World.BLOCKS_HEIGHT - 1) {
            blocks.b[data.blocks[x][y]].draw(x, y);
            y++;
        }
        x++;
}

没有错误(可见的除外)

1 个答案:

答案 0 :(得分:4)

您似乎没有初始化或推送/弹出当前转换。因此,翻译将会累积,产生您所看到的效果,当您通过更大的值进行翻译时,会越走越远。

让我们说你的积木相距10个单位。第一个是用(0,0),然后是下一个(0,10),然后是(0,20),(0,30)等的平移绘制的。

然而,当翻译在视图矩阵中累积时,实际得到的是(0,0),(0,10),(0,30),(0,60)等的翻译。

这很重要,因为它允许您从一系列简单的离散步骤构建复杂的变换。但是,当您想渲染多个对象时,每个对象都有自己的变换,您需要在每个对象之间进行某种形式的重置。

你可以重新初始化整个矩阵,但这有点不整洁,并且需要知道之前已经完成了其他变换(例如相机等)。

相反,您可以将当前矩阵“推”到堆栈上,执行您想要执行的任何本地转换,渲染内容,然后将矩阵“弹出”回来,以便您回到起点,准备好渲染下一个对象。

我应该指出,在GL的更高版本中不推荐使用所有这些功能。使用更现代的API,您可以使用着色器,并可以提供您需要计算的任何变换。