3
$\begingroup$

I just can't find the blender way to do this. I have two objects (cubes) at a given height above a plane. These two cubes are 5cm apart, say. How can I view the perspective projection of these cubes onto the plane below ? I tried shrinkwrap but it gives the ortho projection only. This is probably very simple but this is my first week with blender.

Thanks

GT

$\endgroup$
  • 1
    $\begingroup$ With your mouse over the 3D window hit the <kbd>Numpad 5</kbd> key. Keep in mind that the actual projection will be in the same 3D coordinates. How you view them is the only thing that differs. $\endgroup$ – Rick Riggs Apr 7 '17 at 17:42
  • $\begingroup$ It might be a little more approachable starting out to learn up on the compositor, and how to use render layers. Then you could do something like parent a light to your camera's origin, set your plane to one render layer with the default passes applied, set your cubes to another with only the shadow pass applied, and then output the 1st render layer (you have to render both though, because it needs all info). Anyway it's not completely an easy approach either, but another one to consider. $\endgroup$ – Rick Riggs Apr 7 '17 at 22:36
10
$\begingroup$

Not sure exactly what you want to do, or how you plan to use this information, but depending on you purpose Knife Project tool may do what you want.

If you need to generate actual geometry from this, one way to obtain a bi-dimensional projection from a shape onto another is using the Knife Project tool.

For this to work the projection receiving object must explicitly be of mesh type. Also the objects to be projected must b non manifold, or open geometries for a projection to be found. If you want to project all edges (visible and invisible) then ideally you would have only a "skeleton" composed of edges.

Proceed by entering Edit Mode on all your cubes or whatever geometries you choose, select everything and then erase all faces with X > Only Faces.

Exit edit mode, select all cutting objects, and in the end Shift-Select the plane you wish to project onto, so that all objects remain selected, but the plane is the active one.

Without deselecting enter Edit Mode on the plane objects, switch to User Perspective if desired by pressing Numpad 5, adjust the perspective as desired (the Knife Project operator is view dependent so current viewport position/aperture matters), then invoke Knife Project from the Spacebar-Menu.

Knife Project

Have in mind that this will invariably produce bad topology

$\endgroup$
  • $\begingroup$ That is awesome! $\endgroup$ – Dan Apr 7 '17 at 18:11
  • 1
    $\begingroup$ @Duarte Farrajota Ramos, I think it's the solution the OP wanted. He may want to do this in User Perspective Mode though (Numpad 5). Then he could 'view the perspective projection of these cubes onto the plane'. Anyway +1 from me :). $\endgroup$ – Paul Gonet Apr 7 '17 at 18:28
  • $\begingroup$ Thanks! :) I did change to user perspective in the GIF, though it is probably not very noticeable, I'll specifically mention it in the description. $\endgroup$ – Duarte Farrajota Ramos Apr 7 '17 at 18:30
  • $\begingroup$ Thanks guys but what do I do after invoking knife tool ? I see my cursor change but not sure what to do next ? $\endgroup$ – user1301295 Apr 7 '17 at 18:31
  • $\begingroup$ Its not Knife Tool you should be calling, its the Knife Project operator $\endgroup$ – Duarte Farrajota Ramos Apr 7 '17 at 18:33
6
$\begingroup$

Despite what you said in the question, this is not self evident to have a flat perspective projection of meshes. What I propose here is the use of an empty has projection center which allows some kind of perspective projection of the cubes to the plane.

The green cube are projected below.

From top view:

enter image description here

From another perspective:

enter image description here

This is done using Animation Nodes.

The principle is the following:

  • The cubes to be projected belong to an object group
  • We loop over these cubes
  • And for each we project each of their vertices, using a ray cast to the plane. The projection is done along the vector in the Empty/original vertex axis

At vertex level

enter image description here

  • 1: create a BVH tree from the plane (which will allow to do the raycast)
  • 2: calculate the projection axis between each vertex and the empty
  • 3: do the ray cast and return the result

At object level

enter image description here

  • 1: get the geometry of the object
  • 2: call the subprogram described above
  • 3: collect the resulting mesh geometry

At object group level

enter image description here

  • 1: for each object, loop on the subprogram above
  • 2: collect and merge the result
  • 3: input that result into a new mesh

$\endgroup$
  • $\begingroup$ Well... reading the several comments (did not read them as I was writing this)... not sure I'm not totally out of the scope!! $\endgroup$ – lemon Apr 7 '17 at 18:33
  • 1
    $\begingroup$ I think this is exactly what the poster wanted, with the added benefit of discreet and precise control over the projection perspective, without relying on viewport angle. Though this may be above his skill level at the moment. +1 From me. $\endgroup$ – Duarte Farrajota Ramos Apr 7 '17 at 18:38
  • $\begingroup$ Thanks guys , yes this is way above my skill level for now... lol. I though this is a simple exercise,but seems its not that simple, say two parallen line segements above a plane , project them down below and see that the lines are projected perspectively with increased distance between them due to magnification, thats all I wanted to see while learning blender. Thanks //GT $\endgroup$ – user1301295 Apr 7 '17 at 18:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.