5

How to get Viewport Position, Direction, UpVector? For Perspective and Ortho views.

Here is explanation Screenshot:

enter image description here

iKlsR
  • 43,379
  • 12
  • 156
  • 189
mifth
  • 2,341
  • 28
  • 36
  • 1
    related: http://blender.stackexchange.com/questions/13738/how-to-calculate-camera-direction-and-up-vector – p2or Jan 09 '15 at 22:50
  • I don't need camera. I need 3dView. Repspective/Ortho. But not camera object. – mifth Jan 10 '15 at 20:30
  • Can you define the view-position much more clearly, this is quite an important distinction. (The point in the center of the view you look at, the point you look from?) – ideasman42 Jan 11 '15 at 13:21
  • The point i look from. – mifth Jan 11 '15 at 17:58

2 Answers2

8

You can get information about the view from RegionView3D which can be accessed via space_data.region_3d.

There are utility functions available in the bpy_extras.view3d_utils module.

You may get the view direction like this

r3d.view_rotation * Vector((0.0, 0.0, -1.0))

the up direction should be

r3d.view_rotation * Vector((0.0, 1.0, 0.0))

and the view location:

r3d.view_matrix.inverted().translation

Or another way

region = context.region
rv3d = context.region_data
view3d_utils.region_2d_to_origin_3d(region, rv3d, (region.width/2.0, region.height/2.0))

Despite its name, RegionView3D.view_location specifies the view target.

David
  • 49,291
  • 38
  • 159
  • 317
pink vertex
  • 9,896
  • 1
  • 25
  • 44
  • Thanks a lot! But Ortho view does not show position correctly. Here is my video test: http://youtu.be/Ia7wjCMafqA This line does not work in Ortho "r3d.view_matrix.inverted().translation". Do you know how to fix it? Thanks. – mifth Jan 11 '15 at 12:17
  • I reported the issue with OrthoView here https://developer.blender.org/T43206 – mifth Jan 11 '15 at 12:59
  • I added another approach according to the issue which was discussed. I hope you don't mind. – mifth Mar 04 '15 at 14:19
2

considering the answer given by pink vertex the first part is equivalent to:

r3d = bpy.context.area.spaces.active.region_3d
view_matrix = r3d.view_matrix
x,y,z = view_matrix.to_3x3()

with

view_dir = -z
up = y
FkNWO
  • 74
  • 1
  • 7