Position entity 3d from 2d mouse

Blitz3D Forums/Blitz3D Beginners Area/Position entity 3d from 2d mouse

The Forum Archive is locked. These are the original blitzbasic.com forums, kept so their posts can still be read and searched. No new topics, replies or edits can be made here. To join the conversation, head over to the Blitz3D+ forums.

I wrote this function a while ago for a project. I think it does what you are asking:


; 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


It works at any camera angle to move an entity around on the ground plane (or whatever height you pass into the function.) Funny thing when I wrote this was that I stumbled on the right math by luck. It wasn't working at first, and then I did something I thought was blatantly wrong in order to test something, and against my expectation it worked.