On the one hand, the simplest way to determine where the object should go is to make the ground pickable and use CameraPick.
On the other hand, that method could create issues if you are already doing picks for other stuff, so a while ago (years ago!) I wrote this function based on something from the code archives:
On the other hand, that method could create issues if you are already doing picks for other stuff, so a while ago (years ago!) I wrote this function based on something from the code archives:
; ----------------------------------------------------------------------------- ; Positions an entity in 3D from given 2D coordinates Function PositionEntityFrom2D(usecam,entity,x2d#,y2d#,height#=0,camZoom#=1) gw=GraphicsWidth() gh=GraphicsHeight() x#=-((gw/2)-x2d) y#=(gh/2)-y2d parent=GetParent(entity) EntityParent entity,usecam z#=Abs(EntityZ(entity)) div#=(gw/(2/camzoom))/z x=x/div y=y/div ;z distance determined by a straight line from camera, through xyz coordinates, to height TFormPoint x,y,z,usecam,0 y3d#=height x3d#=TFormedX() z3d#=TFormedZ() EntityParent entity,parent PositionEntity entity,x3d,y3d,z3d End Function ;-----------------------------------------------------------------------------