diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-05-07 14:53:09 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2012-05-07 14:53:09 +0400 |
commit | 022d12a721b04799423edf646b2a08bd48edfe6a (patch) | |
tree | d5eb7265e0a142708f8de1d05b6e4f4ec34e5604 /intern/cycles/render/camera.cpp | |
parent | 69fc654f94cc16176248aeeef89dddd03ffebdc8 (diff) |
Fix most of #31307: cycles panorama camera not working correct with speed
vectors and window texture coordinates. Only for Fisheye Equisolid it's
still not working correct yet. Patch from Dalai with modifications.
Diffstat (limited to 'intern/cycles/render/camera.cpp')
-rw-r--r-- | intern/cycles/render/camera.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp index 95405519cc0..3ecffab7cbc 100644 --- a/intern/cycles/render/camera.cpp +++ b/intern/cycles/render/camera.cpp @@ -158,13 +158,25 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene) kcam->have_motion = 0; if(need_motion == Scene::MOTION_PASS) { - if(use_motion) { - kcam->motion.pre = transform_inverse(motion.pre * rastertocamera); - kcam->motion.post = transform_inverse(motion.post * rastertocamera); + if(type == CAMERA_PANORAMA) { + if(use_motion) { + kcam->motion.pre = transform_inverse(motion.pre); + kcam->motion.post = transform_inverse(motion.post); + } + else { + kcam->motion.pre = kcam->worldtocamera; + kcam->motion.post = kcam->worldtocamera; + } } else { - kcam->motion.pre = worldtoraster; - kcam->motion.post = worldtoraster; + if(use_motion) { + kcam->motion.pre = transform_inverse(motion.pre * rastertocamera); + kcam->motion.post = transform_inverse(motion.post * rastertocamera); + } + else { + kcam->motion.pre = worldtoraster; + kcam->motion.post = worldtoraster; + } } } else if(need_motion == Scene::MOTION_BLUR) { @@ -196,6 +208,10 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene) kcam->sensorwidth = sensorwidth; kcam->sensorheight = sensorheight; + /* render size */ + kcam->width = width; + kcam->height = height; + /* store differentials */ kcam->dx = float3_to_float4(dx); kcam->dy = float3_to_float4(dy); |