Ну вообщем, я пытался сделать воксельный рэйкастер. Мне нужна была функция вращения 3D вектора. Она должна принимать 5 аргументов, координаты вектора (X,Y,Z) и углы вращения (по Y, по X) и вращать вектор вокруг нулевой точки (0,0,0). Я вот попытался свою функцию реализовать, но она работает неправильно:
local function rotateV3X(x,y,z,a)
local a=math.rad(a)
local m11,m12,m13=1,0,0
local m21,m22,m23=0,math.cos(a),-math.sin(a)
local m31,m32,m33=0,math.sin(a),math.cos(a)
return x*m11+y*m12+z*m13, x*m21+y*m22+z*m23, x*m31+y*m32+z*m33
end
local function rotateV3Y(x,y,z,a)
local a=math.rad(a)
local m11,m12,m13=math.cos(a),0,math.sin(a)
local m21,m22,m23=0,1,0
local m31,m32,m33=-math.sin(a),0,math.cos(a)
return x*m11+y*m12+z*m13, x*m21+y*m22+z*m23, x*m31+y*m32+z*m33
end
local function rotateV3Z(x,y,z,a)
local a=math.rad(a)
local m11,m12,m13=math.cos(a),-math.sin(a),0
local m21,m22,m23=math.sin(a),math.cos(a),0
local m31,m32,m33=0,0,1
return x*m11+y*m12+z*m13, x*m21+y*m22+z*m23, x*m31+y*m32+z*m33
end
function ray.rotateV3(x,y,z,ry,rx)
ry,rx=ray.normangle(ry),ray.normangle(rx)
x,y,z=rotateV3Y(x,y,z,ry)
x,y,z=rotateV3X(x,y,z,rx)
x,y,z=rotateV3Z(x,y,z,0)
return x,y,z
end
Кто нибудь может написать правильно вращающий эквивалент? Буду очень благодарен.
Ну вообщем, я пытался сделать воксельный рэйкастер. Мне нужна была функция вращения 3D вектора.
Она должна принимать 5 аргументов, координаты вектора (X,Y,Z) и углы вращения (по Y, по X) и вращать вектор вокруг нулевой точки (0,0,0). Я вот попытался свою функцию реализовать, но она работает неправильно:
Кто нибудь может написать правильно вращающий эквивалент? Буду очень благодарен.
Изменено пользователем Alexспойлер
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах