我正在尝试为射线追踪模拟生成背景。我目前设置的方式是,每当射线撞击物体时,它都会返回亮度。相机正在将光线发送到场景中的每个像素。 get_luminance函数具有一个与它在屏幕上命中位置相对应的参数。
例如,我已经有一个对象,该对象会根据其所在的象限来更改颜色。因此,如果该位置同时具有正值或负值,则该颜色将变为亮红色,例如(1,1)或(-1,-1)。如果该职位只有其中一个,则将其涂成深红色,例如(-1,1)或(1,-1)。 这是这样做的逻辑:
relative_direction = in_position - self.origin
if sum(1 if i > 0 else 0 for i in relative_direction) % 2 == 0:
return Spectrum(0, 255, 0)
return Spectrum(0, 128, 0)
现在,在确定背景的一种棋盘图案时,我想与此应用类似的逻辑。我不确定如何执行此操作。我以为会涉及某种模块化算术,其中每8个像素会交换颜色,但是除此之外,我不确定如何进行。
这是我要执行的操作的粗略图像,颜色每2像素交替出现: https://i.stack.imgur.com/7EMfZ.png
编辑:我已经尝试过类似的事情:
relative_direction = out_position - self.origin
print(relative_direction)
if round(relative_direction[0]/10000) + round(relative_direction[1]/10000) % 2 == 0:
return Spectrum(0, 255, 0)
return Spectrum(255, 255, 0)
这里的逻辑是每个坐标的索引加起来应该是偶数或奇数。加起来是偶数的颜色将变为绿色,否则为黄色。 (如果您想知道为什么我要除以10000,那是因为坐标的大小最高为50000个单位) 但是,这只是生成此图像:
https://i.stack.imgur.com/3mpM5.png
存在一些错误,因为我拒绝了光线追踪的增量t,这解释了为什么它们不是完美的正方形,但是无论哪种方式,我都看不到图案为什么没有延伸到中间...很奇怪。
编辑:原来我要做的就是将整个表达式放在if语句中。数字。