#javascript #3d #cartesian
Вопрос:
Я создаю программу на javascript, которая с нуля отображает 3D-мир на 2d-экране. Я создал функцию для вычисления значения x на экране, на котором будет отображаться 3D-точка. Также необходимо учитывать угол горизонтали, вокруг которого необходимо повернуть точки. Для этого я попытался преобразовать в сферические координаты, а затем добавить угол x наблюдателя к одному из значений. По какой-то причине это искажает все, когда вы не смотрите на ноль градусов. Вот код, а вот выходные данные всей программы: https:// 3d.napoleon1027.repl.co/ (Прямо сейчас он настроен на медленное вращение каждые три секунды, и вы можете перемещаться с помощью клавиш со стрелками / WSAD)
function fx(x,y,z){
//calculates the x, y, and z values relative to your position
z-=pz
x-=px
y-=py
//converts the cartesian coordinates to spherical
var r=Math.sqrt(x**2 y**2 z**2)
var t=Math.acos(z/r)
var f=Math.atan(y/x)
if(x<0){
f =Math.PI
}
//adds your angle to the angle of theta
t =xangle
//converts the spherical coordinates back to cartesian
x=r*Math.cos(f)*Math.sin(t)
y=r*Math.sin(f)*Math.sin(t)
z=r*Math.cos(t)
//adds the player coordinates back
z =pz
x =px
y =py
//returns the x value that this point should be drawn onto the screen at
return (x-px)/(z-pz);
}
Комментарии:
1. ссылка находится здесь: 3d.napoleon1027.repl.co