[Bf-blender-cvs] [15d5b87d956] temp-gpencil-io: GPencil: Compute points in render size when camera view
Antonio Vazquez
noreply at git.blender.org
Wed Jan 20 12:20:10 CET 2021
Commit: 15d5b87d956a1f0da5719f77adb78f8b81c0c781
Author: Antonio Vazquez
Date: Wed Jan 20 12:16:02 2021 +0100
Branches: temp-gpencil-io
https://developer.blender.org/rB15d5b87d956a1f0da5719f77adb78f8b81c0c781
GPencil: Compute points in render size when camera view
Now the size is constant in camera view to the render size.
===================================================================
M source/blender/io/gpencil/intern/gpencil_io_base.cc
M source/blender/io/gpencil/intern/gpencil_io_base.h
===================================================================
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index 742ada3f686..2bfc436cd3d 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -25,6 +25,9 @@
#include <algorithm>
#include <string>
+#include "DNA_vec_types.h"
+
+#include "BKE_camera.h"
#include "BKE_context.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
@@ -79,6 +82,29 @@ GpencilIO::GpencilIO(const struct GpencilIOParams *iparams)
gpd_ = (params_.ob != NULL) ? (bGPdata *)params_.ob->data : nullptr;
cfra_ = iparams->frame_cur;
+ /* Calculate camera matrix. */
+ Object *cam_ob = (Object *)params_.v3d->camera;
+ if (cam_ob != NULL) {
+ RenderData *re = &scene_->r;
+ CameraParams params;
+
+ /* Setup parameters. */
+ BKE_camera_params_init(¶ms);
+ BKE_camera_params_from_object(¶ms, cam_ob);
+
+ /* Compute matrix, viewplane, .. */
+ BKE_camera_params_compute_viewplane(¶ms, re->xsch, re->ysch, re->xasp, re->yasp);
+ BKE_camera_params_compute_matrix(¶ms);
+
+ float viewmat[4][4];
+ invert_m4_m4(viewmat, cam_ob->obmat);
+
+ mul_m4_m4m4(persmat_, params.winmat, viewmat);
+ }
+ else {
+ unit_m4(persmat_);
+ }
+
/* Load list of selected objects. */
create_object_list();
object_created_ = false;
@@ -243,21 +269,21 @@ void GpencilIO::gpencil_3d_point_to_project_space(const float co[3], float r_co[
{
float parent_co[3];
mul_v3_m4v3(parent_co, diff_mat_, co);
+ mul_m4_v3(persmat_, parent_co);
- float tmp[4];
- copy_v3_v3(tmp, parent_co);
- tmp[3] = 1.0f;
- mul_m4_v4(rv3d_->viewmat, tmp);
+ parent_co[0] = parent_co[0] / max_ff(FLT_MIN, parent_co[2]);
+ parent_co[1] = parent_co[1] / max_ff(FLT_MIN, parent_co[2]);
- copy_v2_v2(r_co, tmp);
+ r_co[0] = (parent_co[0] + 1.0f) / 2.0f * (float)render_x_;
+ r_co[1] = (parent_co[1] + 1.0f) / 2.0f * (float)render_y_;
/* Invert X axis. */
if (invert_axis_[0]) {
- r_co[0] = winx_ - r_co[0];
+ r_co[0] = (float)render_x_ - r_co[0];
}
/* Invert Y axis. */
if (invert_axis_[1]) {
- r_co[1] = winy_ - r_co[1];
+ r_co[1] = (float)render_y_ - r_co[1];
}
}
diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.h b/source/blender/io/gpencil/intern/gpencil_io_base.h
index d4b013ca802..c2bff0cf79a 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.h
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.h
@@ -126,6 +126,9 @@ class GpencilIO {
float avg_opacity_;
bool is_camera_;
rctf select_boundbox_;
+
+ /* Camera matrix. */
+ float persmat_[4][4];
};
} // namespace blender::io::gpencil
More information about the Bf-blender-cvs
mailing list