我有一个脚本,是的,它需要 11 个参数。它将屏幕上的鼠标坐标转换为用于 3D 鼠标坐标的 3D 矢量。它的准确性非常完美。
{
var mm,dX,dY,dZ,uX,uY,uZ,vX,vY,vZ,mX,mY,mZ, width, height, tFOV;
dX = argument3-argument0;
dY = argument4-argument1;
dZ = argument5-argument2;
mm = sqrt(dX*dX+dY*dY+dZ*dZ);
dX /= mm;
dY /= mm;
dZ /= mm;
uX = argument6;
uY = argument7;
uZ = argument8;
mm = uX*dX+uY*dY+uZ*dZ;
uX -= mm*dX;
uY -= mm*dY;
uZ -= mm*dZ
mm = sqrt(uX*uX+uY*uY+uZ*uZ);
uX /= mm;
uY /= mm;
uZ /= mm;
// v = u x d
vX = uY*dZ-dY*uZ;
vY = uZ*dX-dZ*uX;
vZ = uX*dY-dX*uY;
tFOV = tan(argument9*pi/360);
uX *= tFOV;
uY *= tFOV;
uZ *= tFOV;
vX *= tFOV*argument10;
vY *= tFOV*argument10;
vZ *= tFOV*argument10;
width = window_get_width();
height = window_get_height();
mX = dX+uX*(1-2*mouse_y/height)+vX*(2*mouse_x/width-1);
mY = dY+uY*(1-2*mouse_y/height)+vY*(2*mouse_x/width-1);
mZ = dZ+uZ*(1-2*mouse_y/height)+vZ*(2*mouse_x/width-1);
mm = sqrt(mX*mX+mY*mY+mZ*mZ);
global.mouse_dx = mX/mm;
global.mouse_dy = mY/mm;
global.mouse_dz = mZ/mm;
}
我想要做的是反转这个脚本,以便有 14 个参数。与这个相同的 11,但多了 3 个代表向量的 x、y 和 z。
我知道这不是许多人能真正理解的编码语言。您可能已经习惯了 C、Java、Lua、Python 或类似的东西。这不一样。语法大不相同。3D 中的 mouse_x 和 mouse_y 代表游戏窗口中鼠标的 x 和 y。
无论如何,我已经尝试了很长时间。谁能帮我从最后开始反转这个脚本并返回一个包含 2 个索引 x 和 y 的数组?它可能不会那么容易工作,但我正在尝试将 3D 点转换为涉及相机的 2D 点。
以下是原始脚本参数的列表:
(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,角度,方面)
xfrom、yfrom 和 zfrom 代表相机的 x,y,z。xto、yto 和 zto 表示相机正在看的坐标。xup、yup 和 zup 是相机感知为“向上”的向量。在我的例子中,0,0,1 用于将正 z 值表示为向上,将负 z 值表示为向下。角度是相机的水平视野。aspect 是窗口的宽度除以窗口的高度。