java - 在瓷砖水平上阻挡光线

标签 java

我正在用Java制作一个平铺(平铺大小为16px)关卡滚动游戏。 现在我正在处理照明系统。 我使用每个灯光(黄色 block 和瓷砖)的代码计算了灯光梯度(如图所示):

visMap = new int[level.getWidth() * level.getHeight()];

    int lighted = 0;

    for (int x = 0; x < level.getWidth(); x++) {
        for (int y = 0; y < level.getHeight(); y++) {
            double xd = (this.x >> 4) - x;
            double yd = (this.y >> 4) - y;

            double distance = Math.sqrt(xd * xd + yd * yd);

            double p = power * 1.0;
            double bright = p - distance;

            visMap[x + y * level.getWidth()] = (int) (bright * power);
        }
    }

现在我正在尝试让方 block 以某种方式阻挡光线(就像在现实生活中一样)。 有没有一个好的方法呢? 提前致谢, 扎普利克

图片:click

最佳答案

递归地传播光。随着每个递归级别减少适当数量的光强度。还要跟踪光线移动的方向。一旦遇到障碍,就停止该递归分支。

关于java - 在瓷砖水平上阻挡光线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751937/

相关文章:

java - 从文件中读取图像并使用java显示它

java - 迭代器泛型,无法声明不匹配类型的迭代器(可能是转换问题)

java - 从 main 启动并行线程并等待结果

java - 如何只取点前后的数字?

java - JPanel 不会重新绘制

java - 分析数字

java - 使用 jfreechart 更改高于阈值的线条颜色

java - 如何使用JRE部署JavaFX 11 Desktop应用程序

java - 使用 LocalDate 的日期格式问题

java - 用于在 Android 上比较图像的 OpenGL ES 1.1/2.0 着色器