微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加速单工噪声

如何解决加速单工噪声

我想制作一个 Java 程序,其中使用 Simplex Noise 生成移动的天空,但我遇到了性能问题(帧率太低)。我正在使用 https://github.com/KdotJPG/OpenSimplex2/blob/master/java/OpenSimplex2F.java 噪音等级。
我的生成天空的函数会在每一帧完全重新生成它:

private void generate() {
        float y = offset;
        for (int i = 0; i < frame.getHeight(); i++) {
            float x = offset;
            for (int j = 0; j < frame.getWidth(); j++) {
                double a = noise.noise2(x,y) + 0.25f * noise.noise2(2 * x,2 * y) + 0.125f * noise.noise2(4 * x,4 * y);
                a = a / (1 + 0.25 + 0.125);
                a = (a + 1) / 2;
                a *= 100;
                Color color = Color.getHSBColor(220f / 360f,a / 100f,1f);
                background.setRGB(j,i,color.getRGB());
                x += noiseResolution;
            }
            y += noiseResolution;
        }
    }

background 在哪里 BufferedImage 我正在绘图,offset 表示移动了多少噪音。 我试图保存每帧 background 的像素数组,并将其转换为应该移动的像素数,然后我只生成了新的像素。不幸的是,因为它当时渲染得太快,它应该移动的像素数是例如0.2,所以我无法通过分数转换数组索引。
所以我想唯一的方法就是以某种方式以另一种方式生成它,但我完全不知道如何。

谢谢!

解决方法

不确定 Java,但在 C++ 中使用 DirectX、OpenGL 或任何类似的低级接口,这应该可以在 HLSL (DirectX) 或 GLSL (OpenGL) 的 GPU 上轻松完成。我实现了 5D Simplex 噪声,甚至放大了它以填满我的大屏幕,在我 9 岁的旧电脑上,我的老式 ho-hum 显卡仍然每秒处理几百帧。这是它的样子。

https://www.youtube.com/watch?v=oRO1IGcWIwg

如果您可以从 Java 运行片段着色器,我认为这将是可行的方法。我认为 Java 中有一些 OpenGL 接口,所以你可能想看看它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。