Algorithm 这种光线投射算法有何缺陷?

Algorithm 这种光线投射算法有何缺陷?,algorithm,rendering,Algorithm,Rendering,在GPU上执行的矩阵操作可能很难调试,因为GPU操作实际上不允许控制台日志 我已经为一个实时2D渲染引擎设计了一个,基于一种非常简单的形式,我猜可以称之为光线投射,我很难找出它的错误(它输出[0,0,0255,0,0,0255,…],而不是填充颜色) this.thread.x是正在操作的矩阵中当前单位(颜色通道)的索引。 场景是由6个单位的束组成的缓冲区,每个值按顺序包含: 实体类型,在本例中,始终为“精灵”的1 精灵ID,对应于包含实体精灵缓冲区的this.constants.texture

在GPU上执行的矩阵操作可能很难调试,因为GPU操作实际上不允许控制台日志

我已经为一个实时2D渲染引擎设计了一个,基于一种非常简单的形式,我猜可以称之为光线投射,我很难找出它的错误(它输出
[0,0,0255,0,0,0255,…]
,而不是填充颜色)

this.thread.x
是正在操作的矩阵中当前单位(颜色通道)的索引。
场景
是由6个单位的束组成的缓冲区,每个值按顺序包含:

  • 实体类型,在本例中,始终为“精灵”的
    1

  • 精灵ID,对应于包含实体精灵缓冲区的
    this.constants.textures
    中的索引

  • X偏移,精灵的左边缘

  • Y偏移,精灵的上边缘

  • 精灵的宽度

  • 精灵的高度

  • bufferWidth
    是渲染区域的宽度乘以4个通道。
    this.constants.textures
    是一个数组,其中包含来自
    场景的精灵ID所引用的每个精灵的缓冲区

    注意:对于那些好奇的人来说,这是一个JavaScript库,它将JS func转换为GLSL代码,并通过WebGL运行


    函数(场景、场景长度、缓冲区宽度){
    var channel=this.thread.x%4;
    如果(通道===3){
    返回255;
    }
    var x=this.thread.x%bufferWidth;
    var y=数学地板(this.thread.x/bufferWidth);
    对于(设i1=0;i10和偏移量X10&&偏移量1

    对我尝试实施的概念的解释:

    使用矩阵操作,如果要在整个渲染区域上执行过程,则要绘制精灵时,所做的工作将远远超过必要的工作量。如果您将渲染区域分解成块,并且只更新正在绘制的精灵所涉及的部分,那么这将是一种相当不错的方法。对于实时游戏渲染来说,它当然足够好了。这将是一种多通道方法,每次渲染一个精灵


    或者,对于我认为可能的最佳方法,我们可以使用单遍方法,对整个渲染区域执行单矩阵操作,基于对场景中的每个精灵和该精灵中的相关像素进行非常基本的碰撞检测,评估每个颜色通道应该有什么

    如果要向后计算精灵偏移,计算应为:

    var offsetX1 = x - x1;
    

    偏移应随着x和y的增加而增加(假设精灵坐标与屏幕坐标具有相同的坐标系),因此不应减去x和y

    var offsetX1 = x - x1;
    
    var offsetY1 = y - y1;