Построение 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
115 +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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 424 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир