0

我目前正在试验 LWJGL。我创建了一个非常简单的 .obj 加载器,将其渲染到我的屏幕上,并创建了一个类似 fps 的相机。它再简单不过了,但我只有 40 FPS,而且它使用了大量的视频内存,而且我的 GPU 风扇吹得像地狱一样。我做错什么了?

这是我的代码:

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

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

模型.java: http ://pastebin.com/gMX8SXXc

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

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

4

1 回答 1

1

第一个问题:

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

  • 启动计时器,以纳秒为单位(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),它们要快得多。您现在使用的方法已被弃用,对 GPU 来说非常昂贵,但更易于使用。VBO 确实值得使用,它们需要更多的工作,但性能会好很多。一些简单的谷歌搜索会找到一些好的参考和例子。

第三个问题:

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

于 2012-08-14T21:52:05.223 回答