Fair point, not really a fan of `ndc space`, though I can't think of one I'm especially happy with either...
other possibilities ... world_to_view2d (except it returns z component) world_to_camera_frame (since it uses camera framing functions, though this is more of a detail) world_to_view_uvw world_to_render ? On Fri, Jun 14, 2013 at 12:06 AM, Brecht Van Lommel <[email protected]> wrote: > Nitpick about the terminology used here. "Camera space" usually refers > to the coordinates when transformed by the camera matrix but without > any perspective transformation applied, so I would say "2D camera > space coords" here. OpenGL and Renderman would call the result of this > function Normalized Device Coordinates, though I'm not sure if there > is a common name for the space, maybe "NDC space". > > On Thu, Jun 13, 2013 at 3:51 PM, Campbell Barton <[email protected]> wrote: >> Revision: 57433 >> >> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57433 >> Author: campbellbarton >> Date: 2013-06-13 13:51:01 +0000 (Thu, 13 Jun 2013) >> Log Message: >> ----------- >> handy function for getting the 2d camera coords for a worldspace location. >> >> bpy_extras.object_utils.world_to_camera(scene, obj, coord) >> >> Modified Paths: >> -------------- >> trunk/blender/release/scripts/modules/bpy_extras/object_utils.py >> >> Modified: trunk/blender/release/scripts/modules/bpy_extras/object_utils.py >> =================================================================== >> --- trunk/blender/release/scripts/modules/bpy_extras/object_utils.py >> 2013-06-13 13:09:32 UTC (rev 57432) >> +++ trunk/blender/release/scripts/modules/bpy_extras/object_utils.py >> 2013-06-13 13:51:01 UTC (rev 57433) >> @@ -25,6 +25,7 @@ >> "object_add_grid_scale", >> "object_add_grid_scale_apply_operator", >> "object_image_guess", >> + "world_to_camera", >> ) >> >> >> @@ -265,3 +266,40 @@ >> if image is not None: >> return image >> return None >> + >> + >> +def world_to_camera(scene, obj, coord): >> + """ >> + Returns the 2d camera space coords for a 3d point. >> + >> + Where (0, 0) is the bottom left and (1, 1) is the top right of the >> camera frame. >> + values outside 0-1 are also supported. >> + >> + Takes shift-x/y, lens angle and sensor size into account >> + as well as perspective/ortho projections. >> + >> + :arg scene: Scene to use for frame size. >> + :type scene: :class:`bpy.types.Scene` >> + :arg obj: Camera object. >> + :type obj: :class:`bpy.types.Object` >> + :arg coord: World space location. >> + :type coord: :class:`mathutils.Vector` >> + :return: normalized 2d vector. >> + :rtype: :class:`mathutils.Vector` >> + """ >> + >> + co_local = obj.matrix_world.normalized().inverted() * coord >> + >> + camera = obj.data >> + frame = [-v for v in camera.view_frame(scene=scene)[:3]] >> + if camera.type != 'ORTHO': >> + frame = [(v / -v.z) * co_local.z for v in frame] >> + >> + min_x, max_x = frame[1].x, frame[2].x >> + min_y, max_y = frame[0].y, frame[1].y >> + >> + x = (co_local.x - min_x) / (max_x - min_x) >> + y = (co_local.y - min_y) / (max_y - min_y) >> + >> + from mathutils import Vector >> + return Vector((x, y)) >> >> _______________________________________________ >> Bf-blender-cvs mailing list >> [email protected] >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers -- - Campbell _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
