Все фреймы в варкрафте размещаются по экрану, т.е. по координатам окна. В рефорджете внесли возможность отслеживать координаты мыши, но выдают координаты положения мыши в карте, короче не то.
В рефордже я нашел пример с сеткой из фреймов Можно отслеживать как курсор проходит по фреймам. Но и минусы: перемещают рывками, при уменьшении шага сетки - игра зависает.
Мб проще конвертировать.
DGUI - в этой системе есть конверт из мировых координат в оконные координаты. Или наоборот, из оконных в мировые. Однако, я не знаю как применить, че то может код упростить чем мне такие матрицы. Тут как бы матрицы, пробую упростить - так тут индексы пусты матриц пусты.
Lua-wgeometry - эта 3D библиотека. Просто переписанная с DGUI. Аналогично как и с DGUI
По этой теме понял, что ничего нет такого путного.
Можно получить упрощенный код конверта?
Есть ли нормальные конверт координат? Мне пока не понятны в

можно получить обзор/плоскость камеры?
у нас есть
//координаты камеры
x1 = GetCameraEyePositionX()
y1 = GetCameraEyePositionY()
z1 = GetCameraEyePositionZ()
координаты цели
//координаты центра обзора камеры
x2 = GetCameraTargetPositionX()
y2 = GetCameraTargetPositionY()
z2 = GetCameraTargetPositionZ()
смещение высоты камеры
ZOffset = GetCameraField(CAMERA_FIELD_ZOFFSET) 
расстояние между камерой и целью
r = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
обзоры камеры
//размеры экрана
real WidthScreen = 0.544
real HeightScreen = 0.302
//размеры границ камеры GetCameraBoundMaxX и GetCameraBoundMaxY равны 2816x2816

//размеры обзора камеры GetCameraBoundMaxX*WidthScreen и GetCameraBoundMaxY*HeightScreen равны 1531.904x850.432
 CameraMaxX = GetCameraBoundMaxX()*WidthScreen
 CameraMaxY = GetCameraBoundMaxY()*HeightScreen
Кроме того нужны 3 угла для плоскости:
//эти три параметра alpha, beta, gamma поворачиваются относительно дефольтных размеров
//надо проверять разницу, т.е. изменения с чем-то. А то смотрите угол 360, он возмет и перевернет. Потом выпадет опять 360, снова перевернет
local real alpha = ModuloReal((GetCameraField(CAMERA_FIELD_ROTATION)-bj_CAMERA_DEFAULT_ROTATION* bj_DEGTORAD), bj_PI*2)
//вращение камеры аокруг оси X относительно дефолтного размера
local real beta = ModuloReal((GetCameraField(CAMERA_FIELD_ROLL)-bj_CAMERA_DEFAULT_ROLL* bj_DEGTORAD), bj_PI*2)
//наклоны камеры вокруг оси Y относительного дефолтного размера
local real gamma = ModuloReal((GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)-bj_CAMERA_DEFAULT_AOA* bj_DEGTORAD), bj_PI*2)
как не пытаюсь сам понять, так и не получается. Не верна это, то что написал выше. Верно работает только для одной оси поворот. Шарнирный замок.
нашел ее информацию здесь матрицу не понимаю от чего берут.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
27
у меня есть координаты мыши - x,y. как применить их тут
    -- Converts window coordinate to world coordinate
    -- @param v Vector3 where x and y - window coords and z - overlay range
    -- @return Vector3
    windowToWorld = function(self, v)
      return Vector3:new(
        self.eye.x+self.axisZ.x*v.z+v.x*self.axisX.x*screenWidth*v.z+v.y*self.axisY.x*screenHeight*v.z,
        self.eye.y+self.axisZ.y*v.z+v.x*self.axisX.y*screenWidth*v.z+v.y*self.axisY.y*screenHeight*v.z,
        self.eye.z+self.axisZ.z*v.z+v.x*self.axisX.z*screenWidth*v.z+v.y*self.axisY.z*screenHeight*v.z
      )
    end,
    
    -- Converts world coordinate to window coordinate
    -- @param v Vector3
    -- @return Vector3
    worldToWindow = function(self, v)
      v = v:transform4(self.view):transform4(self.projection)
      v.z = math.abs(v.z)
      return v
    end

а вот
-- Create a new vector from coords. Skip the coords to create a zero vector
new = function(self, x, y, z)
local o = {}
setmetatable(o,self)
o.x = x or 0.
o.y = y or 0.
o.z = z or 0.
return o
end,

откуда берутся всякие точки, двоеточие, всякие self не понятно. еще setmetatable. похоже lua надо изучать
27
можно получить обзор/плоскость камеры?
у нас есть
//координаты камеры
x1 = GetCameraEyePositionX()
y1 = GetCameraEyePositionY()
z1 = GetCameraEyePositionZ()
координаты цели
//координаты центра обзора камеры
x2 = GetCameraTargetPositionX()
y2 = GetCameraTargetPositionY()
z2 = GetCameraTargetPositionZ()
смещение высоты камеры
ZOffset = GetCameraField(CAMERA_FIELD_ZOFFSET) 
расстояние между камерой и целью
r = GetCameraField(CAMERA_FIELD_TARGET_DISTANCE)
обзоры камеры
//размеры экрана
real WidthScreen = 0.544
real HeightScreen = 0.302
//размеры границ камеры GetCameraBoundMaxX и GetCameraBoundMaxY равны 2816x2816

//размеры обзора камеры GetCameraBoundMaxX*WidthScreen и GetCameraBoundMaxY*HeightScreen равны 1531.904x850.432
 CameraMaxX = GetCameraBoundMaxX()*WidthScreen
 CameraMaxY = GetCameraBoundMaxY()*HeightScreen
Кроме того нужны 3 угла для плоскости:
//эти три параметра alpha, beta, gamma поворачиваются относительно дефольтных размеров
//надо проверять разницу, т.е. изменения с чем-то. А то смотрите угол 360, он возмет и перевернет. Потом выпадет опять 360, снова перевернет
local real alpha = ModuloReal((GetCameraField(CAMERA_FIELD_ROTATION)-bj_CAMERA_DEFAULT_ROTATION* bj_DEGTORAD), bj_PI*2)
//вращение камеры аокруг оси X относительно дефолтного размера
local real beta = ModuloReal((GetCameraField(CAMERA_FIELD_ROLL)-bj_CAMERA_DEFAULT_ROLL* bj_DEGTORAD), bj_PI*2)
//наклоны камеры вокруг оси Y относительного дефолтного размера
local real gamma = ModuloReal((GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)-bj_CAMERA_DEFAULT_AOA* bj_DEGTORAD), bj_PI*2)
как не пытаюсь сам понять, так и не получается. Не верна это, то что написал выше. Верно работает только для одной оси поворот. Шарнирный замок.
нашел ее информацию здесь матрицу не понимаю от чего берут.
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.