我试图重新实施business card ray tracer生锈,以获得乐趣和利润。据我所知,所有的逻辑都已到位,但对于我的生活,我无法弄清楚如何正确地将我的浮点值转换为ppm文件格式所期望的RGB字节。在原始代码(C ++)中,它看起来像这样:
printf("%c%c%c",(int)p.x,(int)p.y,(int)p.z);
其中p
是浮点数的三维向量,表示RGB值。我对print!
没有太多运气,所以在经过多次调整之后我写了等价表达式:
let mut out = io::stdout();
out.write(&[(p.x as u8),(p.x as u8),(p.x as u8)]);
然而,输出是关闭的(我可以发布它,如果你真的想要,但足以说明正确的输出有很多不可打印的字符,而我的版本是相当可打印的)。老实说,我不理解任何一种语言的类型转换的细微差别。有人想帮忙吗?
修改: full source(请注意我使用浮点数作为矢量属性)
答案 0 :(得分:2)
你的代码看起来基本上是正确的(假设你没有表示p.x三次)。 这是一个小程序,显示打印包含u32s作为字节的RGB结构,我验证了它按预期工作(打印ABC \ n)
struct RGB {
x: u32,
y: u32,
z: u32
}
fn main() {
let p = RGB{ x:65, y:66, z:67};
let mut out = std::io::stdout();
out.write([p.x as u8, p.y as u8, p.z as u8, 10]);
}