首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dda算法-射线投射

dda算法-射线投射
EN

Stack Overflow用户
提问于 2017-10-06 13:42:33
回答 1查看 3.2K关注 0票数 2

我开始了一个项目,使用光线投射技术GitHub项目来寻找射线的长度(从球员到墙壁的距离),我只是增加了一个。但是有几个问题,它的时间消耗,不准确&将是很难纹理。

我尝试实现daa算法,它不只是增加1 ->,他遍历网格并返回准确的位置。

http://www.geeksforgeeks.org/dda-line-generation-algorithm-computer-graphics/

有没有人有这方面的经验或任何提示?

无算法方式:

代码语言:javascript
复制
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);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 14:06:25

您不需要DDA或Bresenham算法来找到光线与墙壁的交点。

如果你需要一个与给定边框(或框边)的交点,就用射线方程和边框位置来计算它。

如果您想获得与网格单元格的交叉点--使用像阿马马提德斯这样的体素化算法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46607152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档