Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2018-05-25 12:05:51 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-05-25 13:48:33 +0300
commitfbc65c6b28fb4cec4ad67ba0345cd045914af20e (patch)
tree5377c9cb59620f7d5adc57bddf3dc3c37272ad10 /source/blender/modifiers/intern/MOD_uvproject.c
parent8a78a53e3bbaa119e00a416a289b75889650d3b6 (diff)
Fix T55165: Driving camera lens with property behaves unexpectedly
Differential Revision: https://developer.blender.org/D3438
Diffstat (limited to 'source/blender/modifiers/intern/MOD_uvproject.c')
-rw-r--r--source/blender/modifiers/intern/MOD_uvproject.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c
index 207c692071c..b491496caa4 100644
--- a/source/blender/modifiers/intern/MOD_uvproject.c
+++ b/source/blender/modifiers/intern/MOD_uvproject.c
@@ -55,7 +55,9 @@
#include "MEM_guardedalloc.h"
+#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
static void initData(ModifierData *md)
{
@@ -111,7 +113,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
}
typedef struct Projector {
- Object *ob; /* object this projector is derived from */
+ Object *ob_eval; /* object this projector is derived from */
float projmat[4][4]; /* projection matrix */
float normal[3]; /* projector normal in world space */
void *uci; /* optional uv-project info (panorama projection) */
@@ -119,6 +121,7 @@ typedef struct Projector {
static Mesh *uvprojectModifier_do(
UVProjectModifierData *umd,
+ Depsgraph *depsgraph,
Object *ob, Mesh *mesh)
{
float (*coords)[3], (*co)[3];
@@ -137,7 +140,7 @@ static Mesh *uvprojectModifier_do(
for (i = 0; i < umd->num_projectors; ++i)
if (umd->projectors[i])
- projectors[num_projectors++].ob = umd->projectors[i];
+ projectors[num_projectors++].ob_eval = DEG_get_evaluated_object(depsgraph, umd->projectors[i]);
if (num_projectors == 0) return mesh;
@@ -154,15 +157,14 @@ static Mesh *uvprojectModifier_do(
float offsetmat[4][4];
Camera *cam = NULL;
/* calculate projection matrix */
- invert_m4_m4(projectors[i].projmat, projectors[i].ob->obmat);
+ invert_m4_m4(projectors[i].projmat, projectors[i].ob_eval->obmat);
projectors[i].uci = NULL;
- if (projectors[i].ob->type == OB_CAMERA) {
-
- cam = (Camera *)projectors[i].ob->data;
+ if (projectors[i].ob_eval->type == OB_CAMERA) {
+ cam = (Camera *)projectors[i].ob_eval->data;
if (cam->type == CAM_PANO) {
- projectors[i].uci = BLI_uvproject_camera_info(projectors[i].ob, NULL, aspx, aspy);
+ projectors[i].uci = BLI_uvproject_camera_info(projectors[i].ob_eval, NULL, aspx, aspy);
BLI_uvproject_camera_info_scale(projectors[i].uci, scax, scay);
free_uci = 1;
}
@@ -171,7 +173,7 @@ static Mesh *uvprojectModifier_do(
/* setup parameters */
BKE_camera_params_init(&params);
- BKE_camera_params_from_object(&params, projectors[i].ob);
+ BKE_camera_params_from_object(&params, projectors[i].ob_eval);
/* compute matrix, viewplane, .. */
BKE_camera_params_compute_viewplane(&params, 1, 1, aspx, aspy);
@@ -200,7 +202,7 @@ static Mesh *uvprojectModifier_do(
projectors[i].normal[0] = 0;
projectors[i].normal[1] = 0;
projectors[i].normal[2] = 1;
- mul_mat3_m4_v3(projectors[i].ob->obmat, projectors[i].normal);
+ mul_mat3_m4_v3(projectors[i].ob_eval->obmat, projectors[i].normal);
}
numPolys = mesh->totpoly;
@@ -312,7 +314,7 @@ static Mesh *applyModifier(
Mesh *result;
UVProjectModifierData *umd = (UVProjectModifierData *) md;
- result = uvprojectModifier_do(umd, ctx->object, mesh);
+ result = uvprojectModifier_do(umd, ctx->depsgraph, ctx->object, mesh);
return result;
}