Почему орфографическая проекция не работает точно при использовании CombinedCamera.js с использованием Three.js?

Я рассмотрел рабочий пример CombinedCamera и вдохновлен Я внедрил комбинированную камеру в свою работу.

 camera = new THREE.CombinedCamera( width /2, height/2, 45, 0.1, 1000, -1000, 1000, 1000 );

Но при использовании Perspective Camera мое приложение работает нормально:

введите здесь описание изображения

Но это же приложение, при использовании ортогональной проекции вообще не работает и выглядит очень странно.

введите здесь описание изображения

В чем проблема в моем коде? Мне нужна орфографическая проекция во всех направлениях x, y и z на объекте. Как это сделать?


person three.jsaddict    schedule 04.01.2013    source источник
comment
Судя по источнику CombinedCamera, ширина и высота ортогональной проекции определяются пересечением плоскости на полпути от ближней и дальней плоскостей перспективной проекции. Если ваш объект маленький, но близко к камере, он будет отображаться очень маленьким, как на втором изображении. У вас есть несколько вариантов: используйте setFov или setZoom в орфографическом режиме, чтобы лучше кадрировать ваш объект, или увеличьте масштаб вашего объекта и поместите камеру/объект так, чтобы его центр находился посередине от ближней и дальней плоскости камеры.   -  person Slagh    schedule 04.01.2013
comment
@Slagh, как увеличить мой объект, когда выбран орфографический режим? Извините, если я вас больше тороплю, я изучаю three.js каждый день. Это моя ссылка на jsfiddle: jsfiddle.net/sagh0900/PrVbg/3 В этой среде, несмотря на то, что я прикрепил комбинированный camera.js, на удивление он не работает. Не могли бы вы проверить это и помочь разобраться с этой проблемой орфографической проекции. Заранее спасибо.   -  person three.jsaddict    schedule 04.01.2013
comment
Когда я проверяю свою консоль Chrome js, она сообщает об ошибке с прикрепленным файлом CombinedCamera.js из раскрывающегося списка — Uncaught SyntaxError: Unexpected token ‹ возможно, потому что он содержит элементы HTML.   -  person Slagh    schedule 04.01.2013
comment
Что ж, я добавил CombinedCamera.js в качестве дополнительного ресурса с HTML-тегами. Теперь я удалил, и самое приятное, что он работает, jsfiddle.net/sagh0900/ArFFH/1 это рабочая версия   -  person three.jsaddict    schedule 04.01.2013
comment
@Slagh, не могли бы вы помочь мне с этим вопросом, stackoverflow.com/questions/14123225/   -  person three.jsaddict    schedule 04.01.2013
comment
Я рад, что это работает! Также в качестве эксперимента я убрал вызовы setZoom из двух режимов камеры, и изменил параметры камеры в init на CombinedCamera( width /2, height/2, 45, 0.1, 50, -1000, 1000 ); и это тоже работает.   -  person Slagh    schedule 04.01.2013


Ответы (1)


Ширина и высота CombinedCamera орфографической проекции определяются пересечением плоскости на полпути от ближней и дальней плоскостей перспективной проекции. Если ваш объект маленький, но близко к камере, он будет отображаться очень маленьким, как на втором изображении.

В ваших настройках есть 0.1, 1000 в качестве ближней и дальней плоскостей, поэтому он пытается кадрировать объект примерно в 500 единицах от камеры, что намного больше, чем ваш объект.

У вас есть несколько вариантов:

  1. Используйте setFov или setZoom в орфографическом режиме, чтобы лучше кадрировать объект.
  2. Увеличьте масштаб объекта и поместите камеру/объект так, чтобы его центр находился посередине от ближней и дальней плоскости камеры.
  3. Измените ближнюю и дальнюю плоскости камеры, чтобы они более точно обрамляли вашу сцену. если ваша камера находится в 25 единицах от центра объектов, установите расстояние ближней и дальней плоскости на камере на 0.1, 50 - средняя точка будет ~25 единиц и будет кадрировать ваши объекты по желанию при переключении режимов.
person Slagh    schedule 04.01.2013