作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我开始了一个使用光线转换技术的项目 GitHub Project为了找到射线的长度(从玩家 pos 到墙的距离),我只增加了一个。但这有几个问题,它耗时、不准确并且难以进行纹理化。
我尝试实现 daa 算法,它不只是递增 1 -> 他遍历网格并返回精确位置。
http://www.geeksforgeeks.org/dda-line-generation-algorithm-computer-graphics/
有没有人有这方面的经验或任何提示?
无算法方式:
for(let resolution = 0; resolution < display.width / 2; resolution++){ //every 2nd px gets scanned
let ray = this.pov + (-this.fov / 2 + this.fov / (display.width / 2) * resolution);
let distance = 0, hit = false;
/*ugly way of raycasting!*/
do{
let x = this.x + distance * Math.cos(ray * (Math.PI / 180));
let y = this.y + distance * Math.sin(ray * (Math.PI / 180));
if(map[Math.floor(x / block)][Math.floor(y / block)]){
distance = Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2));
hit = true
}
distance += 1;
}while(!hit);
distance = convert / distance;
canvas.fillStyle = "#fff";
canvas.fillRect(resolution * 2, display.height / 2 - distance / 2, 2, distance);
}
最佳答案
您不需要 DDA 或 Bresenham 算法来找到光线与墙壁的交点。
如果您需要一个与给定边界(或框边)的交点 - 只需使用射线方程和边界位置进行计算即可。
如果你想获得与网格单元的交点 - 使用体素化算法,如 Amanatides-Woo
关于javascript - dda算法——光线转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607152/
我正在尝试使用 Sfml 编写 2D 游戏。对于那个游戏,我需要一个 Lightengine 和一些代码,这些代码可以为我提供玩家可见的世界区域。由于这两个问题非常吻合(实际上是相同的),我想同时解决
我是一名优秀的程序员,十分优秀!