Ответ: Как вычислить 2D координату курсора в 3D мире?
От своей ранее изложенной идеи не отказываюсь, но всё-же слишком надолго застревать на одном месте наверное не стоит. Пока-же реализую функцию по определению 3Д координаты по отношению к 2Д курсору другим способом, который мне предложили АВТОМАТ и КИРПИ4. За что им очень благодарен!
Суть функции такова.
Создаётся Mesh в позиции камеры и направляется в ту-же сторону, далее Mesh отодвигаю от камеры на необходимое расстояние.
MoveEntity msh,0,0,-distance#
Далее в цикле при помощи.
CameraProject (cam,EntityX(msh),EntityY(msh),EntityZ(msh))
iccx=ProjectedX #()
iccy=ProjectedY #()
Узнаю 2Д координату Mesh и передвигаю его в сторону курсора.
Когда 2Д координаты относительно сошлись вывожу 3Д позицию Mesh в тексте "X\Y\Z\"... Ну как-то так.
Вот та самая функция, может кому нужно будет.
; -------------------------------------------------------------------------------
; ПОЗИЦИЯ 2Д КУРСОРА В 3Д КООРДИНАТУ
; cam=личный номер камеры, camW,camH=разрешение экрана,
; distance#=предполагаемая дистанция до 3Д точки
Function FF_2Dto3D$(cam,distance#)
mx=MouseX(): my=MouseY()
; определяю местоположения камеры
camX#=EntityX#(cam)
camY#=EntityY#(cam)
camZ#=EntityZ#(cam)
; поворот камеры по осям XYZ
anglX#=EntityPitch#(cam)
anglY#=EntityYaw#(cam)
anglZ#=EntityRoll#(cam)
; создаю Mesh, ориентирую его в направлении камеры
; и отодвигаю на нужную дистанцию
msh=CreateMesh ()
PositionEntity msh,camX#,camY#,camZ#
RotateEntity msh,anglX#,anglY#,anglZ#
MoveEntity msh,0,0,-distance#
; цикл выравнивания
Repeat
; узнаю координату Mesh в 2Д области экрана
CameraProject (cam,EntityX(msh),EntityY(msh),EntityZ(msh))
iccx=ProjectedX #()
iccy=ProjectedY #()
; передвижение Mesh в сторону курсора
noko=0: xxx#=0: yyy#=0
If iccx<mx-1 Then xxx#=.1: noko=1
If iccx>mx+1 Then xxx#=-.1: noko=1
If iccy<my-1 Then yyy#=-.1: noko=1
If iccy>my+1 Then yyy#=.1: noko=1
MoveEntity msh,xxx#,yyy#,0
Until noko=0
; узнаю координату Mesh в 3Д области
xxx#=EntityX(msh): yyy#=EntityY(msh): zzz#=EntityZ(msh)
; удаляю msh за ненадобностью
FreeEntity msh
; передаю XYZ координаты для использования
XYZ$=xxx#+"\"+yyy#+"\"+zzz#+"\"
Return XYZ$
End Function
; -------------------------------------------------------------------------------
__________________
|