伪3d原理解释 主要是透视投影

当我们将图像投影到一个旋转的表面上时,我们需要考虑以下几个方面:

像素位置的计算:对于每个显示窗口中的像素,我们需要计算它在旋转表面上的位置。在代码中,使用了以下公式来计算旋转表面上的位置:

px = x / z * sc
py = y / z * sc
这里,x和y表示像素在显示窗口中的位置,z表示距离旋转表面的距离,sc控制透视效果。通过这个计算,我们可以得到像素在旋转表面上的坐标(px, py)。

取样像素的获取:一旦我们计算出像素在旋转表面上的位置,我们需要从图像的3D数组中获取相应的像素值。在代码中,使用了以下步骤来获取取样像素:

首先,计算出旋转表面上的坐标(px, py)对应的图像中的位置。由于旋转表面可能超出图像的尺寸,因此需要对坐标进行取模运算,确保它们在图像范围内。
然后,使用取模后的坐标(fp)从3D数组中获取对应的像素值。这个像素值被存储在变量fc中。
显示窗口的更新:在获取了取样像素后,我们需要将其赋值给显示窗口中对应的位置,以更新窗口的内容。在代码中,使用了以下步骤来更新窗口:

创建一个与显示窗口具有相同尺寸的3D数组sarray,用于存储更新后的像素值。
在循环中,遍历显示窗口中的每个像素,并根据像素在窗口中的位置计算其在旋转表面上的位置。
使用上述步骤中计算得到的位置,从3D数组中获取对应的像素值,并将其赋值给sarray中对应的位置。
最后,使用pygame.surfarray.blit_array()将sarray中的像素值更新到显示窗口上。
通过以上步骤,代码实现了将图像投影到旋转表面上的效果。通过不断更新显示窗口,我们可以观察到图像在3D空间中的旋转投影效果。需要注意的是,参数的调整和更复杂的数学计算可以进一步改进投影效果,例如调整透视参数、添加光照效果等。

**

取模运算:

**
在计算像素在旋转表面上的位置时,我们需要将其映射到图像的范围内。取模运算的目的是确保计算得到的位置在图像的有效范围内,以避免超出图像的尺寸。
在代码中,我们使用取模运算来处理旋转表面上的坐标(px, py),以确保它们在图像范围内。具体而言,我们将其取模图像的宽度和高度,得到的结果就是坐标在图像范围内的位置。
例如,假设图像的宽度为800像素,高度为600像素。如果计算得到的旋转表面上的坐标(px, py)为(-100, 700),那么经过取模运算后,它们将变为(700, 100),即在图像范围内的位置。
这样做的目的是确保我们从图像的3D数组中正确地获取像素值。如果不进行取模运算,计算得到的位置可能会超出图像的尺寸,导致获取的像素值越界,从而产生错误的投影效果。
因此,取模运算在这里起到了限制坐标范围的作用,确保计算得到的位置在图像的有效范围内,从而实现正确的图像投影。

**

图片重复 实现原理

**
在这段代码中,图片重复出现的原因是通过计算像素在旋转表面上的位置,使用取模运算(%)来获取取样像素的位置。当像素位置超出图像的尺寸时,取模运算会将像素位置循环回到图像的起始位置,从而实现图片的重复效果。
具体来说,在以下代码中实现了图片的重复效果:
fp = int(px % tsize[0]), int(py % tsize[1])
fc = d3[fp]
sarray[-i, j] = fc
pygame.Surface.set_at(screen, (i, j), (image.get_at((int(px % tsize[0]), int(py % tsize[1])))))
在这段代码中,px和py分别表示像素在旋转表面上的位置。通过对px和py进行取模运算,即int(px % tsize[0])和int(py % tsize[1]),可以使像素位置在图像的宽度和高度范围内循环。这样,当像素位置超出图像尺寸时,取模运算会将像素位置回到图像的起始位置,从而实现图片的重复。
通过将取样像素的值fc赋值给sarray数组,并使用pygame.Surface.set_at()函数将像素值设置到屏幕上的指定位置(i, j),就可以在窗口中显示出重复的图片。
因此,通过在计算像素位置时使用取模运算,可以实现图片在旋转表面上的重复效果。

**

旋转sin cos

**
在这段代码中,使用了正弦函数(sin)和余弦函数(cos)来实现图像的旋转效果。这是因为正弦函数和余弦函数是周期性函数,它们的周期是2π(弧度)或360°(角度)。
在三维空间中,我们可以使用旋转矩阵来描述物体的旋转。旋转矩阵可以通过正弦函数和余弦函数来构建,从而实现对物体的旋转变换。
在这段代码中,通过调整角度(angle)的变化,即调整正弦函数和余弦函数的输入值,可以实现图像围绕某个中心点进行旋转。
具体来说,通过调整angle的变化,我们可以获得一个在一定范围内周期性变化的值。然后,将这个值分别作为正弦函数和余弦函数的输入,得到对应的旋转矩阵。通过将像素点的坐标乘以旋转矩阵,可以计算出旋转后的像素位置。
这样,通过不断更新angle的值,就可以实现图像的旋转效果。
需要注意的是,这里使用的是简化的旋转变换方式,只考虑了二维平面上的旋转。在实际的三维图形处理中,可能需要使用更复杂的旋转变换方式来处理物体的旋转。
希望这个解释对你有帮助。如果还有其他问题,请随时提问。
正弦函数(sin)和余弦函数(cos)在三角学中被广泛应用,其中一个重要的应用就是描述旋转。
在平面几何中,我们可以使用坐标系来表示点的位置。当我们对一个点进行旋转时,我们可以通过乘以旋转矩阵来实现旋转变换。旋转矩阵的元素可以由正弦函数和余弦函数计算得出。
考虑一个点的坐标为 (x, y),我们希望将它绕原点逆时针旋转一个角度 θ。那么旋转后的新坐标 (x’, y’) 可以通过以下公式计算:
x’ = x * cos(θ) - y * sin(θ)
y’ = x * sin(θ) + y * cos(θ)
这里,cos(θ) 表示角度 θ 的余弦值,sin(θ) 表示角度 θ 的正弦值。通过这些函数,我们可以计算出旋转后的新坐标。
这是因为正弦函数和余弦函数的周期性特征使得它们可以描述旋转。正弦函数和余弦函数的值随着角度的变化而变化,可以表示旋转的效果。通过调整角度的大小,我们可以控制旋转的幅度和方向。
所以,通过使用正弦函数和余弦函数,我们可以方便地实现旋转变换,并将点或图像围绕某个中心点进行旋转。
希望这次的解释更加清晰明了。如果还有其他问题,请随时提问。

猜你喜欢

转载自blog.csdn.net/weixin_40938312/article/details/131737413