Построение View и Perspective матриц для OpenGL Работаю с WebGL, никаких посторонних библиотек использовать не хочу, так как занимаюсь этим именно для опыта в математике.
У меня получилось построить рабочую Perpective матрицу, а вот с View беда.this.eye = new Vec3(0,0,0);
this.up = new Vec3(0,1,0);
this.at = new Vec3(0,0,1);
this.lookAt = function(){
var zaxis = new Vec3(this.at.v.x-this.eye.v.x,this.at.v.y-this.eye.v.y,this.at.v.z-this.eye.v.z).normal();
var xaxis = this.up.cross(zaxis).normal();
var yaxis = zaxis.cross(xaxis);
return new Mat4([
xaxis.v.x,yaxis.v.x,zaxis.v.x,0,
xaxis.v.y,yaxis.v.y,zaxis.v.y,0,
xaxis.v.z,yaxis.v.z,zaxis.v.z,0,
-xaxis.dot(this.eye),-yaxis.dot(this.eye),-zaxis.dot(this.eye),1
]);
}
Как мне кажется, все логично, однако на деле работает совсем не так как должно. С чем может быть беда?

21 Авг 2019 в 06:13
134 +1
0
Ответы
1

Проблема может быть в том, что вы неправильно рассчитываете оси x, y, z для матрицы взгляда.

Для правильного расчета осей x, y, z вам нужно сначала найти вектор направления взгляда (direction), который равен разности вектора, указывающего на точку на которую смотрит камера (at) и вектора камеры (eye). Затем нормализуйте этот вектор direction.

После этого вы можете вычислить ось x как результат векторного произведения вектора up и direction, а ось y как результат векторного произведения direction и x. Не забудьте нормализовать полученные оси x и y.

Теперь вы можете составить матрицу взгляда, используя найденные оси x, y, z и вектор камеры eye.

Попробуйте использовать следующий код для расчета матрицы взгляда:

this.lookAt = function(){
var direction = new Vec3(this.at.v.x - this.eye.v.x, this.at.v.y - this.eye.v.y, this.at.v.z - this.eye.v.z).normal();
var xaxis = this.up.cross(direction).normal();
var yaxis = direction.cross(xaxis);
return new Mat4([
xaxis.v.x, yaxis.v.x, -direction.v.x, 0,
xaxis.v.y, yaxis.v.y, -direction.v.y, 0,
xaxis.v.z, yaxis.v.z, -direction.v.z, 0,
-xaxis.dot(this.eye), -yaxis.dot(this.eye), direction.dot(this.eye), 1
]);
}

Попробуйте использовать этот код и посмотрите, работает ли это правильно для вас. Если у вас все еще есть проблемы, пожалуйста, уточните, в чем именно они заключаются, чтобы мы могли вам помочь.

20 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир