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

Java 我的第一个LWJGL应用程序性能不佳,java,performance,lwjgl,frame-rate,Java,Performance,Lwjgl,Frame Rate,目前我正在试验LWJGL。我创建了一个非常简单的.obj加载程序,将它渲染到我的屏幕上,并创建了一个类似fps的相机。它不能得到太多的模拟,但我只有40帧,它使用了大量的视频内存,我的GPU风扇吹得像地狱一样。我做错了什么 这是我的密码: FPSController.java(主类): OBJLoader.java: Model.java: Face.java: 第一个问题:我的FPS计数器实际上是正确的计数器吗? 第二个问题:为什么这个小程序要占用我这么多GPU? 第三个问题:纹理、照

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

这是我的密码:

FPSController.java(主类):

OBJLoader.java:

Model.java:

Face.java:

第一个问题:我的FPS计数器实际上是正确的计数器吗?
第二个问题:为什么这个小程序要占用我这么多GPU?

第三个问题:纹理、照明、着色器等的最佳模型类型是什么?

第一个问题:

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

  • 启动计时器,单位为毫微秒
    (1)
  • 更新并渲染游戏
  • 停止计时器,在nano
    (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(毫秒)在两个帧之间休眠来限制帧速率

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

第三个问题:


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

非常感谢您提供的信息。我明天就去试试。再次感谢!