You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

像素着色器射线过顶点判定异常、线宽不一致问题求助

问题背景与核心疑问

我被该问题困扰已超过一个月,亟需相关帮助。
核心校验需求:判断从名为start的顶点出发、沿direction方向的射线是否经过target点,校验需同时满足方向与距离要求。经充分调试我判断点积方案无法满足需求,现有三个具体疑问:

  • 逻辑直接计算结果正常,为何在着色器中运行时结果存在差异?
  • 线条理论上应保持统一粗细,为何距离越远绘制出的线条越细?
  • 除我当前使用的旋转矩阵方案外,是否有其他可行的实现思路?
实现前提
  • 绘制载体为全屏四边形(fSQ)
  • 所有计算逻辑运行在像素着色器中
  • 坐标单位规则:单位值1对应1个像素
  • 运行环境屏幕分辨率为1920*1080
现有代码与异常表现

当前相交判断函数实现如下:

bool intersect(float2 target, float2 direction, float2 start) {

 bool intersecting = false;
 static const float thresholdX = 0.5 / SCREENWIDTH;
 static const float thresholdY = 0.5 / SCREENHEIGHT;

 if (direction.x == 0 && direction.y == 0);

 else {
     float2 startToTarget = target - start;
     float changedTargetPositionX = startToTarget.x * direction.x + startToTarget.y * direction.y;
     float changedTargetPositionY = startToTarget.x * (-direction.y) + startToTarget.y * direction.x;
     float rangeOfX = (direction.x * direction.x) + (direction.y * direction.y);

     if (changedTargetPositionX <= rangeOfX + thresholdX && changedTargetPositionX >= -thresholdX &&
         changedTargetPositionY <= thresholdY && changedTargetPositionY >= -thresholdY) {
         intersecting = true;
     }
 }

 return intersecting;
}

该方案通过旋转矩阵旋转向量后校验两向量差值,多数场景下运行正常,但像素差值极小时会出现判定失效:例如传入参数start = (15,0) direction= (10,0) target = (10,0)时,函数本应返回false却错误返回true,仅当像素差值较大时判定结果正常。

调试所用代码如下:

#define MAX = 5;
float2 points[MAX*MAX];
for (float fi = 1; fi < MAX; fi++)
    for (float fj = 1; fj < MAX; fj++)
        points[(int)(fi * MAX + fj)] = float2(fi / MAX , fj / MAX);

for(uint ni=0; ni < MAX*MAX;ni++)
    for(uint nj=3; nj < MAX*MAX; nj++)
        if (intersect(uv,  points[nj]- points[ni], points[ni])) {

            color = float4(1, 0, 0, 1);
            return color;
        }
return float4(0, 0, 0, 1);

运行上述调试代码时,线条粗细随距离增加逐渐变细,不符合所有线条保持统一粗细的预期,调试运行结果截图如下:
着色器调试运行结果

期待各位的解答,感谢。


内容的提问来源于stack exchange,提问作者donghyunlee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:18:22