Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是使用OpenGL渲染平铺的有效方法吗?_Java_Opengl_Lwjgl_Opengl Compat - Fatal编程技术网

Java 这是使用OpenGL渲染平铺的有效方法吗?

Java 这是使用OpenGL渲染平铺的有效方法吗?,java,opengl,lwjgl,opengl-compat,Java,Opengl,Lwjgl,Opengl Compat,这是我用来渲染平铺的例程 private静态void renderfile(int-x1、int-y1、int-size){ glBegin(GL_三角形); 双半尺寸=尺寸/2; glVertex2d(x1+半尺寸,y1+半尺寸); glVertex2d(x1+半尺寸,y1-半尺寸); glVertex2d(x1-半尺寸,y1-半尺寸); glVertex2d(x1-半尺寸,y1-半尺寸); glVertex2d(x1-半尺寸,y1+半尺寸); glVertex2d(x1+半尺寸,y1+半尺寸

这是我用来渲染平铺的例程

private静态void renderfile(int-x1、int-y1、int-size){
glBegin(GL_三角形);
双半尺寸=尺寸/2;
glVertex2d(x1+半尺寸,y1+半尺寸);
glVertex2d(x1+半尺寸,y1-半尺寸);
glVertex2d(x1-半尺寸,y1-半尺寸);
glVertex2d(x1-半尺寸,y1-半尺寸);
glVertex2d(x1-半尺寸,y1+半尺寸);
glVertex2d(x1+半尺寸,y1+半尺寸);
格伦德();
}

现在,常规工作正常,但看起来有点混乱。使用Java OpenGL+LWJGL有更好的方法吗

不,它没有效率。您应该使用显示列表或更好的-顶点缓冲区对象(VBO)。

您在旧GL中的代码存在重大问题:

  • 计算
    glBegin/glEnd
  • 混合
    double
    int
    强制在类型之间进行代价高昂的转换
  • 不使用向量
  • 昂贵的原始
  • 使用
    double
更快的方法是使用
glVertex2dv
并将坐标预先计算到某个表中(遗憾的是,您当前的api不支持需要更改应用程序架构的静态表)。顺便说一句,这是VBO使用的一个简单的小飞跃。另外,
双精度
通常在旧GL中浪费,因为插值器无论如何都是32位的(即使在新硬件上也是如此)。为了优化,我会把你的代码转换成这样的(对不起,不是一个java编码器I C++中的代码,所以它可能是语法错误):

但是,如果您想要真正的电源,请使用VBO。看


您正在使用opengl 1 api。使用现代opengl api更好。使用平铺的确切原因是什么?也许您不需要一直使用平铺,只渲染一个四边形和一个适当的片段着色器就可以获得相同的结果。
DisplayLists
通常会降低当前硬件上的速度。。。他们在20年前做过一件事,但即使是在那时,也只是为了一些gfx卡。
private static void renderTile(float x, float y, float size) 
    {
    const float  a = 0.5*size;
    const float p[4*2]= 
        {
        x-a,y-a,
        x+a,y-a,
        x+a,y+a,
        x-a,y+a,
        };

    glBegin(GL_QUADS);
    glVertex2fv(p); p+=2;
    glVertex2fv(p); p+=2;
    glVertex2fv(p); p+=2;
    glVertex2fv(p); p+=2;
    glEnd();
    }