我的第一个LWJGL应用程序性能不佳

时间:2012-08-14 21:38:51

标签: java performance lwjgl frame-rate

我正在尝试LWJGL。我创建了一个非常简单的.obj加载器,将其渲染到我的屏幕上,然后我创建了一个类似fps的摄像头。它不能得到多少辛辣,但我只得到40 FPS,并且它使用了大量的视频内存,而我的GPU风扇正在吹得像地狱一样。我做错了什么?

这是我的代码:

FPSController.java(主类): http://pastebin.com/kjWrJs0p

OBJLoader.java: http://pastebin.com/cGmLU0Fz

Model.java: http://pastebin.com/gMX8SXXc

Face.java: http://pastebin.com/5P813v9V

第一个问题:我的FPS计数器实际上是一个合适的计数器吗? 第二个问题:为什么这个小程序要求我的大部分GPU? 第三个问题:与纹理,灯光,着色器等一起使用的最佳模型类型是什么?

1 个答案:

答案 0 :(得分:1)

第一个问题:

我真的不明白你的FPS代码在做什么,所以可能是错的。基本思路是:

  • 以nanos (1)
  • 开始计时器
  • 更新并渲染游戏
  • 以纳米(2)
  • 停止计时器
  • 减:(2) - (1),这是您的机器更新和渲染所需的纳秒时间(3)
  • 除以:1e9 / (3)。这是你的帧率

在Java中:

long start = System.nanoTime();
updateAndRenderTheGame();
long stop = System.nanoTime();
long time = stop - start;
float framerate = 1e9f / time; // 1e9f is equivalent to 1000000000.0f

第二个问题:

你的粉丝正在吹像地狱的原因,可能是因为你的FPS代码没有用,而你认为​​你只有40 FPS,但实际上你获得了更高的帧率。让我们说200 FPS。为防止这种情况发生,您应使用Thread.sleep(milliseconds);

在两帧之间休眠来限制帧速率

你应该使用顶点缓冲对象(VBO' s),它们要快得多。您现在使用的方法已被弃用,对于GPU而言非常昂贵,但更易于使用。 VBO非常值得使用,它们需要更多的工作,但性能会好很多。一些简单的谷歌搜索将找到一些很好的参考和例子。

第三个问题:

我不是3D Graphics的专业人士,但我玩过OBJ文件。我用Blender创建了它们。只需确保在使用blender导出时,在窗口左侧的面板中检查要导出的所有数据。 (如:位置,法线,面部,紫外线等......)