'Vedo: Is there a way to add a camera to scenes and see images from perspective?

I'm using Vedo in Python to visualize some 3D scans of indoor locations.

enter image description here

I would like to, e.g., add a 'camera' at (0,0,0), look left 90 degrees (or where ever), and see the camera's output.

Can this be done with Vedo? If not, is there a different python programming framework where I can open .obj files and add a camera and view through it programmatically?



Solution 1:[1]

You can plot the same object in an embedded renderer and control its behaviour via a simple callback function:

from vedo import *

settings.immediateRendering = False  # can be faster for multi-renderers

# (0,0) is the bottom-left corner of the window, (1,1) the top-right
# the order in the list defines the priority when overlapping
custom_shape = [
        dict(bottomleft=(0.00,0.00), topright=(1.00,1.00), bg='wheat', bg2='w' ),# ren0
        dict(bottomleft=(0.01,0.01), topright=(0.15,0.30), bg='blue3', bg2='lb'),# ren1
]

plt = Plotter(shape=custom_shape, size=(1600,800), sharecam=False)

s = ParametricShape(0) # whatever object to be shown
plt.show(s, 'Renderer0', at=0)
plt.show(s, 'Renderer1', at=1)

def update(event):
    cam = plt.renderers[1].GetActiveCamera() # vtkCamera of renderer1
    cam.Azimuth(1) # add one degree in azimuth

plt.addCallback("Interaction", update)

interactive()

enter image description here

Check out a related example here. Check out the vtkCamera object methods here.

Solution 2:[2]

I usually use schema:

...
plt = Plotter(bg='bb', interactive=False)
camera = plt.camera
plt.show(actors, axes=4, viewup='y')
for i in range(360):
   camera.Azimuth(1)  
   camera.Roll(-1)
   plt.render()
...
plt.interactive().close()

Good Luck

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mmusy
Solution 2 stansy