文档看到使用gui.show()或者像素矩阵保存图像,3D场景的图像怎么保存?
想保存多帧连续图片,window.show能正确显示动画,但是window.saveimage只保存了第一帧,其他图片都重复了第一帧
window = ti.ui.Window(“Window”,res=(600,600))
gui = window.get_gui()
canvas = window.get_canvas()
canvas.set_background_color((0,0,0.))
scene = ti.ui.Scene()
camera = ti.ui.Camera()
camera.position(1.8,1.8,0.8)
camera.up(0,0,1)
camera.lookat(0,0,0)
step_size = 1
step = 0
while window.running:
if step >= len(slice) - 2:
step = len(slice) - 2
print(int(step))
step = step + step_size
scene.mesh(all_vts[step],all_ids[step], color=(0.2, 0.7, 0.3))
camera.track_user_inputs(window,movement_speed=0.03,hold_key=ti.ui.RMB)
scene.ambient_light(color=(1,1,1))
scene.point_light(pos=(-1,1,1),color=(1,1,1))
# scene.point_light(pos=(0, -1, 1), color=(1, 1, 1))
scene.set_camera(camera)
canvas.scene(scene)
# window.show()
window.save_image(f"save_img/{int(step)}.jpg")
试试用 write_image ?
我用的1.1.3版本,write_image已经被弃用了啊,而且看代码write_image也是调用了save_image
啊,抱歉,你是对的,我贴了一个 deprecated 的 api.
可以格式化一下你的代码不?
请你检查一下:
- 你的场景是否是一个静态场景?
- 你的 len(slice) 是否是期望的值。有可能你的 step 一开始就已经 >= len(slice) - 2?
len(slice)没问题,不是静态场景,window.show()可以看到动态变化,就是保存的图片时都和第一帧一样(图片命名按step命名)
能给个代码地址我们复现一下不?(不排除有 bug 的可能)
import taichi as ti
ti.init(arch=ti.cpu)
res_x,res_y = 600,600
ball1_pos = ti.Vector.field(3, dtype=ti.f32, shape=1)
ball2_pos = ti.Vector.field(3, dtype=ti.f32, shape=1)
ball1_to_ball2 = 30
theta = 0
@ti.kernel
def update_earth_pos(theta:ti.f32):
ball2_pos[0][0] = ball1_to_ball2 * ti.cos(theta)
ball2_pos[0][1] = ball1_to_ball2 * ti.sin(theta)
ball2_pos[0][2] = 0
ball1_pos[0] = ti.Vector([0, 0, 0])
window = ti.ui.Window("Window",res=(res_x,res_y))
canvas = window.get_canvas()
canvas.set_background_color((1,1,1.))
scene = ti.ui.Scene()
camera = ti.ui.Camera()
camera.position(50,50,50)
camera.up(0,0,1)
camera.lookat(0,0,0)
img_index = 0
while window.running:
update_earth_pos(theta)
theta = theta + 0.001
scene.particles(ball1_pos, radius=5, color=(1, 0, 0))
scene.particles(ball2_pos, radius=1, color=(0, 0, 1))
camera.track_user_inputs(window,movement_speed=0.03,hold_key=ti.ui.RMB)
scene.ambient_light(color=(0.5,0.5,0.5))
scene.point_light(pos=(-5,5,5),color=(1,1,1))
scene.set_camera(camera)
canvas.scene(scene)
# window.show()
img_index = img_index + 1
print(img_index)
window.save_image(f"save_img/{img_index}.jpg")
这么简单的都不行,是不是我的用法有问题