我一直在开发一款使用 BufferedImage 渲染到屏幕的游戏。 BufferedImage
是根据十六进制颜色数组创建的。因此,在屏幕上渲染一个矩形可能如下所示:
public void renderRectangle (int xl, int yl, int rWidth, int rHeight, int color, double dist) {
for (int x = xl; x < xl + rWidth; x++) {
for (int y = yl; y < yl + rHeight; y++) {
pixels [x + y * WIDTH] = color; //set pixel's color.
zBuffer [x + y × WIDTH] = dist; //set pixel's distance from camera.
}
}
}
不幸的是,在完成这些计算后,尤其是在 3D 渲染时,它变得相当滞后。
但是诸如《毁灭战士》(也不使用 GPU)之类的游戏运行良好。
那么如何在没有 opengl 的情况下渲染这些图形并且没有延迟呢?
最佳答案
上面的代码本身不会成为你的性能问题。当然,您可以以某种方式优化绘制该矩形(例如,经常预先计算需要的矩形),但这不会影响性能。
您能否展示一些渲染方法的摘录(您是否为渲染的每一帧创建一个新的缓冲图像?-->这将是您的性能问题)。您还确定问题确实出在渲染上,而不是触发屏幕重绘吗?
就《doom》(1) 而言,还请考虑它是 VGA(仅限 320x200 像素)并且具有非常简化的 3d 引擎,该引擎基于对矩形进行简单的矩阵变换。此外,引擎还有很多逻辑来决定世界地图的哪些区域在屏幕上实际上可见(而不是在相机后面或隐藏在另一堵墙后面),并且只渲染这些部分。
鉴于您问题中的信息很少,我希望这能引导您走向正确的方向。
关于java - Java 中的加速像素阵列渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29522399/