java - Java 中的加速像素阵列渲染

标签 java arrays rendering bufferedimage pixel

我一直在开发一款使用 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/

相关文章:

java - 运行代码格式化程序时,我可以阻止 Intellij 拆分字符串文字吗?

java - 方法未返回数组的正确值。我究竟做错了什么?

java - favicon.ico 不在 spring mvc 中显示

java - 如何在java中将CSV float 转换为double

c - 为什么这个字符数组会出现 Seg Fault

arrays - 旋转 kotlin 数组

c++ - Direct2D 渲染 CPU 使用率

ASP.NET 页面呈现

c++ - OpenGL 如何渲染它的三角形?

java - 数据绑定(bind)时如何在android XML中写三元操作条件