Lua / Как двигать камеру в SAMP ?

Double Tap Inside

Известный
Автор темы
Проверенный
1,898
1,252
Версия MoonLoader
.026-beta
В общем моделирую ситуацию:
Камера находиться в неопределенном исходном положении.
Я хочу её повернуть на "10 пикселей 2D Экрана" левее, или в любую другую сторону.

Как повернуть камеру на определенное растояние и в нужную сторону? Отталкиваяясь от её текущего положения.

Подчеркивию.
Целевой точки в 3D пространстве у меня нет.
Это не аим на 3D координату.
И это не бег на 3D координату.
 
Последнее редактирование:
  • Нравится
Реакции: Vespan

wojciech?

Известный
206
120
float posX, float posY, float posZ = convertScreenCoordsToWorld3D(float posX, float posY, float depth)

pointCameraAtPoint(float pointAtX, float pointAtY, float pointAtZ, int switchstyle)

Насколько я понимаю, по дефолту камера находится в центре 2д экрана, смещая относительно этих координат позицию, конвертируй 2д координаты в мировые 3д и устанавливай направление камеры в эти координаты
 
Последнее редактирование:

Double Tap Inside

Известный
Автор темы
Проверенный
1,898
1,252
float posX, float posY, float posZ = convertScreenCoordsToWorld3D(float posX, float posY, float depth)

направление камеры в полученные координаты попробуй ставить
 Нет исходной 2Д точки. Есть только необходимое растояние в каком-то 2Д направлении. Получается на данный момент мне нечего впихинуть в эту функцию. Допустим я хочу подвинуть на один условный пиксель влево, то есть + (х=-1, y=0). Я же не получу нужный результат твоей функцией, верно?


Насколько я понимаю, по дефолту камера находится в центре 2д экрана, смещая относительно этих координат позицию, конвертируй 2д координаты в мировые 3д и устанавливай направление камеры в эти координаты
 Хм, папробую.
 
Последнее редактирование:

Double Tap Inside

Известный
Автор темы
Проверенный
1,898
1,252
Еще, как вариант, конвертировать позицию камеры или ее текущее направление в экранные, и уже от этих координат отталкиваться

float X, float Y, float Z = getActiveCameraCoordinates()
float X, float Y, float Z = getActiveCameraPointAt()

Такой вариант как я сделал должен был по идее крутить камеру по оси Х, но ничего не происходит =(

Lua:
while true do
        wait(0)

        local at_x, at_y, at_z =  getActiveCameraPointAt()
        local scr_x, scr_y = convert3DCoordsToScreen(at_x, at_y, at_z)
        scr_x = scr_x + 200
       
        local new_x, new_y, new_z = convertScreenCoordsToWorld3D(scr_x, scr_y) -- для чего последний аргумент глубины?
       
        print(at_x, at_y, at_z, new_x, new_y, new_z)
       
        pointCameraAtPoint(new_x, new_y, new_z)

end
 

wojciech?

Известный
206
120
Lua:
local vector3d = require("vector3d")

---@number oX смещение в пикселях по оси X
---@number oY смещение в пикселях по оси Y
function shiftCameraByPixelsOffset(oX, oY)
  local w, h = convert3DCoordsToScreen(getActiveCameraPointAt())
  local v = vector3d(getActiveCameraCoordinates()) - vector3d(convertScreenCoordsToWorld3D(w + oX, h + oY, 10))
  local f = math.atan2(v.y, v.x)
  local t = math.atan2(math.sqrt(v.x ^ 2 + v.y ^ 2), v.z) - math.pi / 2
  setCameraPositionUnfixed(t, f)
end
 
Последнее редактирование:

Double Tap Inside

Известный
Автор темы
Проверенный
1,898
1,252
Lua:
local vector3d = require("vector3d")

---@number oX смещение в пикселях по оси X
---@number oY смещение в пикселях по оси Y
function shiftCameraByPixelsOffset(oX, oY)
  local w, h = convert3DCoordsToScreen(getActiveCameraPointAt())
  local v = vector3d(getActiveCameraCoordinates()) - vector3d(convertScreenCoordsToWorld3D(w + oX, h + oY, 10))
  local f = math.atan2(v.y, v.x)
  local t = math.atan2(math.sqrt(v.x ^ 2 + v.y ^ 2), v.z) - math.pi / 2
  setCameraPositionUnfixed(t, f)
end
Харош, пиши в лс карту.
convertScreenCoordsToWorld3D аргумент глубины что делает?