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

光线追踪相机设置问题:相机在原点时球体偏离原点

光线追踪相机偏移问题排查

核心错误点

1. 弧度转换数值错误

你把圆周率写成了13.14,这是完全错误的,正确值应为3.1415926或标准库宏M_PI(需包含math.h)。这个错误会直接导致视口高度计算完全失真,引发物体显示位置偏移。

2. FOV计算遗漏除以2的步骤

视口高度的正确计算公式是 2 * focal_len * tan(FOV/2 * 弧度),你当前代码直接用tan(sc->cam.fov * 弧度),未将FOV除以2,会让视口高度远大于预期,导致场景元素显示位置偏离。

修正后的代码片段

t_camera    camera(t_canvas *canvas, t_scene *sc)
{
    t_camera    cam;
    double      focal_len;
    double      viewport_height;
    const double pi = 3.1415926; // 或使用M_PI

    // 修正:FOV先除以2再转弧度
    viewport_height = 2 * tan( (sc->cam.fov / 2.0) * pi / 180 );
    focal_len = 1.0;
    cam.orig = sc->cam.cen;
    cam.viewport_h = viewport_height;
    cam.viewport_w = viewport_height * canvas->aspect_ratio;
    cam.focal_len = focal_len;
    cam.horizontal = make_vec(cam.viewport_w, 0, 0);
    cam.vertical = make_vec(0, cam.viewport_h, 0);
    cam.left_bottom = sub_vec(sub_vec(sub_vec(cam.orig, div_vect(cam.horizontal, 2)),
                             div_vect(cam.vertical, 2)), make_vec(0, 0, focal_len));
    return (cam);
}

额外验证点

  • 确认sub_vec(a, b)逻辑确实是a - b,若为b - a需调整减法顺序。
  • 检查球体定义是否确实在原点(0,0,0),排除球体自身位置参数错误导致的偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:27:24