java - 我想每帧调用一次 glBegin 和 glEnd

标签 java opengl lwjgl

如标题所示,我希望每帧/更新只能调用一次 glBegin 和 glEnd ,因为我听说并且正在经历,如果每次更新多次调用它,速度会大大减慢。

这是我的渲染函数的代码:

GL11.glTranslatef(0, 0, -10);
    int x = 0;

    while (x < World.BLOCKS_WIDTH - 1) {
        int y = 0;
        while (y < World.BLOCKS_HEIGHT - 1) {

            if( x * World.BLOCK_SIZE  <= Display.getHeight() ||  y * World.BLOCK_SIZE <= 
                Display.getWidth() ||  x * World.BLOCK_SIZE >= 0 || 
                y * World.BLOCK_SIZE >= 0 ) {

            blocks.b[data.blocks[x][y]].draw(x + Main.PosX, y + Main.PosY);

            }

            y++;
        }
        x++;

}

感谢任何帮助。

这是我的 block 类:

GL11.glPushMatrix();
    GL11.glTranslatef(Xa * World.BLOCK_SIZE, Ya * World.BLOCK_SIZE, 0);
    //GL11.glRotatef(0, 0, 1, 0);
    //GL11.glRotatef(0, 1, 0, 0);

    Texture.bind();



        GL11.glBegin(GL11.GL_QUADS);
        GL11.glColor3f(1f, 1f, 1f);
        //GL11.glNormal3f(0, 0, 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();


        GL11.glPopMatrix();

}
PS。我能理解一点纯OpenGL。

最佳答案

速度减慢不是由于 glBegin…glEnd 造成的,而是由于其间大量的 glNormal、glTexCoord、…glVertex 调用造成的。这称为立即模式,自从 OpenGL-1.1 发布以来就已经过时了,支持顶点数组。那是 15 年前的事了。

请使用顶点数组,最好与顶点缓冲区对象结合使用;这才是真正的性能改进的来源。

关于java - 我想每帧调用一次 glBegin 和 glEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15157985/

相关文章:

java - 在 Java 中将 3D int 数组转换为八叉树

java - 如何扩展静态最终 Guava 实用程序类?

opengl - 是否可以同时使用索引和法线?

java - 具有透明背景的 LWJGL 窗口?

ios - 关于 CIContext、OpenGL 和 Metal (SWIFT) 的困惑。 CIContext 默认使用 CPU 还是 GPU?

c++ - Windows Visual C++ 链接到 Mesa3D OpenGL

java - 根据 ID 在 spritesheet 中显示纹理

java - 从表中的按钮调用 servlet

java - 将文本字段数据附加到 java 中的现有 JSON 文件

Java 比较器总是将值读取为字符串