正如我在评论中指出的那样,您最好使用类似orbit_on_path(). 您注意到 gif 最终质量低下,这就是您寻找其他选项的原因。
您仍然可以保存到 MP4 文件并将其转换为具有任何质量要求的 gif,或者您可以复制orbit_on_path()引擎盖下的内容。移动相机(而不是操纵它的变换矩阵)应该更加健壮。
无论如何,要在这里回答您的确切问题,您必须以不平凡的方式转换灯光。这是一个根据您不完整的代码复制您的情况的最小示例:
mport numpy as np
import pyvista as pv
from pyvista.examples import download_bunny
# example data
mesh = download_bunny()
mesh.rotate_x(90)
matrices = [
np.array([
[np.cos(phi), -np.sin(phi), 0, 0],
[np.sin(phi), np.cos(phi), 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
])
for phi in np.linspace(0, 2*np.pi, 22, endpoint=False)
]
for i, matrix in enumerate(matrices):
plotter = pv.Plotter(window_size=[512, 512], off_screen=True)
plotter.set_background("#363940")
plotter.camera.zoom(3)
plotter.camera.model_transform_matrix = matrix
plotter.add_mesh(mesh, smooth_shading=True, color="red", specular=10)
plotter.set_focus(mesh.center)
#for light in plotter.renderer.lights:
# pass # option 1
# light.transform_matrix = matrix # option 2
# light.transform_matrix = np.linalg.inv(matrix) # option 3
pngname = f"zzpic{i:03d}.png"
plotter.show(screenshot=pngname)
在那里,我留下了 3 个选项来操作渲染器的默认灯光。
第一种选择是不理会灯光的变换矩阵。生成的动画如下所示:

如您所见,灯光相对于场景(兔子)是静态的。兔子有黑暗的一面和光明的一面。这有点令人惊讶,因为默认灯是与相机一起移动的相机灯。但是设置变换矩阵似乎绕过了这种联系,可能会将相机的有效位置从其物理位置移开。
第二个选项是您的问题:将相同的变换矩阵应用于灯光:
它不像您的示例那样明显,但是灯光四处移动,既没有链接到兔子也没有链接到相机。眯着眼睛可能会注意到,在兔子的一整圈中,有两个黑暗实例和两个明亮实例。
这让我想到了最后一个选择:将逆变换应用于灯光!结果如下所示:

似乎这种设置使兔子始终保持良好的照明。在您的分形示例和卫星路径上,如果这确实修复了照明,那将是非常明显的。我希望这可以将灯光的有效位置与相机的有效位置一起放回原处。