Nano Hash - криптовалюты, майнинг, программирование

Движение камеры вокруг модели

Я хочу, чтобы моя камера двигалась за моделью, когда она вращается, как в игре с перспективой от третьего лица — чтобы она всегда «смотрела» на заднюю часть модели. У меня есть фреймворк, поэтому синтаксис может немного отличаться от обычного opengl. Я использую стандартную камеру

Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);

и повернуть камеру я пробовал

this.mouseRotation += 20.0f;
this.eyeX = (float) Math.sin(this.mouseRotation / 180.0f * 3.14f) * 2.0f; this.eyeZ = (float) Math.cos(this.mouseRotation / 180.0f * 3.14f) * 2.0f;

mouseRotation - это угол, под которым расположена модель, поэтому очевидно, что камера также должна быть перемещена в положение, расположенное на 20 градусов дальше по «кругу». Но вместо этого объект вращается вокруг себя, а камера совершает круговое движение, но не вокруг модели, а рядом с ней, продолжая смотреть в ту же точку.

Любые идеи, как заставить это работать?

27.01.2013

Ответы:


1

Из вашего примера я считаю, что короткий ответ состоит в том, чтобы добавить this.at (которое должно быть позицией вашего объекта) в ваш this.eye, чтобы глаз располагался относительно объекта.

Более подробно, скажем, положение вашего объекта this.at, и вы хотите, чтобы камера следовала за объектом на некотором расстоянии, скажем, «d» «позади» объекта. Если у вас есть единичный вектор (т. е. тот, длина которого равна 1,0), указывающий на переднюю часть объекта, то this.at - d должно быть положением камеры (т. е. this.eye). Чтобы заставить камеру вращаться вокруг объекта, сначала примените вращение к «d» (в приведенном выше примере кажется, что вы вращаетесь вокруг оси «Y» [поскольку вы изменяете только глаза X и глаза Z]), так что

this.eye = this.at - rotation(Y) * d; 
28.01.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..