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。看
- 李>
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();
}