所以,我一直在使用opengl在java中製作一個小型演示程序,就像練習一樣。直到我實現了getTime(),一切進展順利;和getDelta();函數來計算每個幀需要多少時間。然後我通過將它們的速度乘以getDelta()來將它應用到我所有的運動計算中。並且它工作的很好,只是當幀隨機略有下降和getDelta();返回一個稍大的值,我的計算開始輸出真正奇怪的值,這些值仍然在計算計算的運動範圍內,但是不正確,這會發生幾幀,直到幀率上升到正常水平(在這種情況下爲250FPS)通常甚至從確切的位置繼續。自從getDelta();我不知道什麼可能會導致這種情況。似乎功能正常?Java&OpenGL;當使用delta來計算幀獨立運動時渲染僞影
繼承人一些代碼:
private void movementCalculations(double delta) {
sinInc += 0.0015;
sinInc2 += 0.010;
xMove[0] = xSpeed * (float) Math.sin(Math.toDegrees(sinInc/100 * delta)) * 7500;
yMove[0] = ySpeed * (float) Math.sin(Math.toDegrees(sinInc/200 * Math.PI * delta)) * 2500;
zMove[0] = zSpeed * (float) Math.sin(Math.toDegrees(sinInc/200 * delta)) * 1250;
for (int i = 1; i<16; i++) {
xMove[i] = xSpeed * (float) Math.sin(sinInc2/128 * Math.PI * i/2 * delta) * WIDTH * 16;
yMove[i] = ySpeed * (float) Math.sin(sinInc2/64 * Math.PI * i * delta) * HEIGHT * 4;
}
xMove[16] = xSpeed * (float) Math.sin(sinInc2/64 * Math.PI * 2 * delta) * WIDTH * 8;
yMove[16] = ySpeed * (float) Math.sin(sinInc2/32 * Math.PI * 2 * delta) * HEIGHT * 4;
xMove[17] = xSpeed * (float) Math.sin(sinInc2/32 * Math.PI * 2 * delta) * HEIGHT * 10;
}
在下面的調試輸出,達4.0是250FPS正常值,那麼FPS下降和突然XMOVE [17]返回一個幾乎一樣大,但負值?
Last frame in milliseconds: 231884072 Delta: 4.0 xMove[17]: 164.297 Last frame in milliseconds: 231884077 Delta: 5.0 xMove[17]: -160.83817 Last frame in milliseconds: 231884080 Delta: 3.0 xMove[17]: -0.7198944 Last frame in milliseconds: 231884084 Delta: 4.0 xMove[17]: 162.12277
如果沒有這就夠了,這裏是擁有一切運行它的JAR中的應用程序的工作JAR exectuable所以你可以看到自己: http://harha.us.to/files/files_public/Starfield_Exe.jar
我只是想不通出了什麼問題,或者甚至在我的代碼中有什麼錯誤?
正弦輸出範圍爲[-1,1]。這可能是問題嗎? – Torious