Для определения пиксельных координат 3д точки в сцене существует прекрасно работающая функция pixelpos (код ниже). Простыми словами: функция позволяет определить в какой пиксель на рендере Point2 (x, y) попадёт определённая точка из сцены point3 (x, y, z).
Однако при использовании ортографической проекции (виреевская камера + настройка в общем 3д-максовском свитке камер) функция перестаёт работать корректно (к слову, визуально на вьюпорт тоже не влияет).
Честно говоря, даже не совсем понимаю как подступиться, а писать костыли для конкретного случая себе дороже.
Буду очень рад, если найдутся товарищи с уверенной линейной алгеброй, и мы сможем решить вопрос! )
fn PixelPos inputPoint3D = (
local screen_width, screen_height
screen_width=RenderWidth as float
screen_height=RenderHeight as float
thePos = inputPoint3D * viewport.getTM()
screen_origin = mapScreenToView [0,0] (thePos.z) [screen_width,screen_height]
end_screen = mapScreenToView [screen_width,screen_height] (thePos.z) [screen_width,screen_height] world_size = screen_origin-end_screen
x_aspect = screen_width/(abs world_size.x)
y_aspect = screen_height/(abs world_size.y)
screen_coords = point2 (x_aspect*(thePos.x-screen_origin.x)) (-(y_aspect*(thePos.y-screen_origin.y)))
return screen_coords
)
пардон за адский листинг, редактор очень странный, форматирование не даётся…
Куда делся тэг для кода? (