如何根据给定的位置和恒定的中心生成棋盘?

2024-05-29 07:47:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为光线跟踪模拟生成背景。我目前的设置方式是,每当光线击中一个物体时,它就会返回一个亮度。摄影机正在向场景中的每个像素发送光线。“获取亮度”函数有一个参数,该参数对应于它在屏幕上所处的位置。你知道吗

例如,我已经有了一个对象,它会根据所在象限的不同而改变颜色。因此,如果位置同时有正值或负值,它将被涂成亮红色,例如(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个像素都会交换颜色,但除此之外,我不确定如何继续。你知道吗

这是我想做的一个粗略的图像,每两个像素的颜色交替: 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

有一些错误,因为我拒绝了光线跟踪的delta t,这解释了为什么它们不是完美的正方形,但是不管怎样,我不明白为什么图案没有延伸到中间。。。很奇怪。你知道吗

EDIT:原来我所要做的就是在if语句中创建整个表达式。数字。你知道吗


Tags: in参数returnif颜色position像素逻辑

热门问题