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

一周实现Raytracer仅渲染首行,如何修复该问题?

问题分析与修复

你的代码只渲染首行的核心原因:内层循环的n_count变量在完成第一行遍历后未重置为0。当外层循环进入下一行迭代时,n_count已经等于WIDHT(256),不再满足n_count <= WIDHT-1的条件,内层循环直接跳过,导致后续行无输出。

修改后的代码

fn main() {
    const HEIGHT: i32 = 256;
    const WIDTH: i32 = 256; // 修正拼写错误:WIDHT -> WIDTH

    println!("P3\n{} {}\n255", WIDTH, HEIGHT);

    let mut i_count = HEIGHT - 1;

    while i_count >= 0 {
        let mut n_count = 0; // 将n_count移到外层循环内,每次处理新行时重置为0
        while n_count <= WIDTH - 1 {
            let r = n_count as f64 / (WIDTH - 1) as f64;
            let g = i_count as f64 / (HEIGHT - 1) as f64;
            let b = 0.25;

            let ir = (255.999 * r) as i64;
            let ig = (255.999 * g) as i64;
            let ib = (255.999 * b) as i64;

            println!("{} {} {}", ir, ig, ib);
            n_count += 1;
        }
        i_count -= 1;
    }
}

补充说明

  1. 顺带修正了代码里的拼写错误WIDHT改为WIDTH,避免后续可能出现的逻辑混乱。
  2. 将n_count的声明移至外层循环内部,确保每处理一行前,该变量都会被重置为初始值0,保证内层循环能完整遍历当前行的所有像素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:55:21