[Bf-blender-cvs] [f59db22f51d] soc-2019-npr: LANPR: Software mode now allows camera lens shift.

Yiming Wu noreply at git.blender.org
Mon Jun 10 13:52:31 CEST 2019


Commit: f59db22f51d9d10559f92e17b3a2f3f0158aea96
Author: Yiming Wu
Date:   Mon Jun 10 19:52:20 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBf59db22f51d9d10559f92e17b3a2f3f0158aea96

LANPR: Software mode now allows camera lens shift.

===================================================================

M	source/blender/draw/engines/lanpr/lanpr_ops.c

===================================================================

diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 7d7e95631c9..e72b7de6eb9 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -1978,12 +1978,15 @@ void lanpr_perspective_division(LANPR_RenderBuffer *rb)
       tMatVectorMultiSelf3d(rv[i].fbcoord, 1 / rv[i].fbcoord[3]);
       // rv[i].fbcoord[2] = cam->clipsta * cam->clipend / (cam->clipend -
       // fabs(rv[i].fbcoord[2]) * (cam->clipend - cam->clipsta));
+
+      rv[i].fbcoord[0] -= cam->shiftx*2;
+      rv[i].fbcoord[1] -= cam->shifty*2;
     }
   }
 }
 
 void lanpr_transform_render_vert(
-    BMVert *v, int index, LANPR_RenderVert *RvBuf, real *MvMat, real *MvPMat, Camera *Camera)
+    BMVert *v, int index, LANPR_RenderVert *RvBuf, real *MvMat, real *MvPMat, Camera *camera)
 {  // real HeightMultiply, real clipsta, real clipend) {
   LANPR_RenderVert *rv = &RvBuf[index];
   // rv->v = v;
@@ -2653,12 +2656,16 @@ int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl,
     lanpr_LinearInterpolate3dv(rl->l->gloc, rl->r->gloc, Cut, gloc);
     tmat_apply_transform_44d(Trans, vp, gloc);
     tMatVectorMultiSelf3d(Trans, (1 / Trans[3]) /**HeightMultiply/2*/);
+    Camera* camera = cam->data;
+    Trans[0] -= camera->shiftx*2;
+    Trans[1] -= camera->shifty*2;
   }
   else {
     lanpr_LinearInterpolate3dv(rl->l->fbcoord, rl->r->fbcoord, Cut, Trans);
     // tmat_apply_transform_44d(Trans, vp, gloc);
   }
 
+
   // Trans[2] = tmat_dist_3dv(gloc, cam->Base.gloc);
   // Trans[2] = cam->clipsta*cam->clipend / (cam->clipend - fabs(Trans[2]) * (cam->clipend -
   // cam->clipsta));
@@ -2912,6 +2919,7 @@ LANPR_RenderLine *lanpr_triangle_generate_intersection_line_only(LANPR_RenderBuf
   real ZMax = ((Camera *)rb->scene->camera->data)->clip_end;
   real ZMin = ((Camera *)rb->scene->camera->data)->clip_start;
   LANPR_RenderVert *Share = lanpr_triangle_share_point(testing, rt);
+  Camera* cam = rb->scene->camera->data;
 
   tMatVectorConvert3fd(rb->scene->camera->obmat[3], cl);
 
@@ -2994,6 +3002,11 @@ LANPR_RenderLine *lanpr_triangle_generate_intersection_line_only(LANPR_RenderBuf
   tMatVectorMultiSelf3d(l->fbcoord, (1 / l->fbcoord[3]) /**HeightMultiply/2*/);
   tMatVectorMultiSelf3d(r->fbcoord, (1 / r->fbcoord[3]) /**HeightMultiply/2*/);
 
+  l->fbcoord[0] -= cam->shiftx*2;
+  l->fbcoord[1] -= cam->shifty*2;
+  r->fbcoord[0] -= cam->shiftx*2;
+  r->fbcoord[1] -= cam->shifty*2;
+
   l->fbcoord[2] = ZMin * ZMax / (ZMax - fabs(l->fbcoord[2]) * (ZMax - ZMin));
   r->fbcoord[2] = ZMin * ZMax / (ZMax - fabs(r->fbcoord[2]) * (ZMax - ZMin));



More information about the Bf-blender-cvs mailing list