Forum: Poser - OFFICIAL


Subject: Getting the same view from dolly/orbiting cameras

3dcheapskate opened this issue on May 09, 2014 · 21 posts


3dcheapskate posted Tue, 20 May 2014 at 5:24 AM

Finally got there. This seems to do what I want

cam = scn.ActorByInternalName("MAIN_CAMERA")  # Could use "AUX_CAMERA" instead
if cam:
    xd=cam.Parameter("dollyX").Value()
    yd=cam.Parameter("dollyY").Value()
    zd=cam.Parameter("dollyZ").Value()
    rx=cam.Parameter("pitch").Value()
    ry=cam.Parameter("yaw").Value()
    
    # Empirically derived offset of camera viewpoint from camera dollyX/Y/Z position
    # (appears to be a fixed value independent of any other camera parameters - same in Poser 6/9)
    Dz = 1.1
    
    # The camera viewpoint position with x/y/zOrbit all zeroed would be...
    x0=xd
    y0=yd
    z0=zd+Dz
    # ...and converting these to polar coordinates
    E0 = todegs(math.atan2(-y0,z0))
    A0 = todegs(math.atan2(x0,z0))
    D0 = math.hypot(y0,math.hypot(x0,z0))
    
    # yOrbit/xOrbit values are simply added to polar azimuth/elevation respectively...
    Ec=E0+rx
    Ac=A0+ry
    if Ec > 90:
        Ec=180-Ec
        Ac+=180
    if Ec < -90:
        Ec=-180+Ec
        Ac+=180
    Dc=D0
    
    # ...and convert back to cartesian. This is where the main camera viewpoint is located
    yc=-Dcmath.sin(torads(Ec))
    d=Dc
math.cos(torads(Ec))
    xc=dmath.sin(torads(Ac))
    zc=d
math.cos(torads(Ac))
    
    # Move Dolly camera to this point
    dcam = scn.ActorByInternalName("STD_CAMERA")
    if dcam:
        dcam.Parameter("dollyX").SetValue(xc)
        dcam.Parameter("dollyY").SetValue(yc)
        dcam.Parameter("dollyZ").SetValue(zc)
        # Dolly camera yaw/pitch are set the same as the Main camera's yOrit/xOrbit
        dcam.Parameter("pitch").SetValue(rx)
        dcam.Parameter("yaw").SetValue(ry)
        dcam.Parameter("roll").SetValue(0.0)

Cheers,

Pete


The 3Dcheapskate* occasionally posts sensible stuff. Usually by accident. And it usually uses Poser 11, with units set to inches. Except when it's using Poser 6 or PP2014, or when its units are set to PNU or something else.
*soon only to be available in two flavours - 
 DAZ and Renderosity