LINUX.ORG.RU

Look At функция

 , ,


0

1

Как написать функцию look at, что бы камера всегда смотрела на определенный объект?

Пробую так, но кватернион по любой оси при приближении примерно 360 градусов как бы переворачивается (видео где это видно: https://streamable.com/8200l )...

var p = camera.transform.world.getLoc();
var tp = object.transform.world.getLoc();
var dir = new Vec4().crossvec(tp,p).normalize();
var turn = new Quat().fromTo(Vec4.yAxis(), dir);
empty.transform.rot = turn;



Последнее исправление: shiva (всего исправлений: 2)

Возьми движок готовый и не делай себе голову.

crutch_master ★★★★★
()

1. Разложи на два поворота: горизонтальный и вертикальный
2. Перемножь кватернионы чтобы получить композицию поворотов (не перепутай порядок)
3. Получи искомый поворот

Quat().fromTo

Кстати, а тебе норм использовать библиотеку без документации?

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

Перемножь кватернионы чтобы получить композицию поворотов (не перепутай порядок)

Чет куйня какая-то выходит (до 180 градусов нормально, а потом перевороты):

var p = camera.transform.world.getLoc();
var tp = object.world.getLoc();
var mx = (tp.x - p.x);
var my = (tp.y - p.y);
var mz = (tp.z - p.z);
var horizontal = new Vec4(mx, my, 0).normalize();
var vertical = new Vec4(mx, 0, mz).normalize();
var fq = new Quat().fromMat(camera.transform.world);
var hq = new Quat().fromTo(Vec4.yAxis(), horizontal);
var vq = new Quat().fromTo(Vec4.xAxis(), vertical);
var tq = new Quat().multquats(vq,hq);
empty.transform.rot.lerp(fq, tq, 3.0 * Time.delta);
shiva
() автор топика
Ответ на: комментарий от shiva

empty это камера, напутал когда постил сюда.
Y это направление вперед, X вправо, Z вверх

shiva
() автор топика
Ответ на: комментарий от quantum-troll

к тому, что вместо документации там лишь список методов без единой строчки текста

Ну, приблизительно такие функции я из других движков помню, в общем, как-то так. Движок сырой, так что, документации подробной у него долго не будет.

shiva
() автор топика
Ответ на: комментарий от shiva

^2 это возведение в квадрат (не знаю, как там в Haxe его правильно записать).
Суть в том, что мы смотрим вертикальный угол с точки зрения системы координат, где иксовая компонента всегда смотрит по направлению объекта.

quantum-troll ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.