Search code examples
pythoncameravedo

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

  • 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.