Вопрос по – Огр / Могре: камера с двумя точками зрения

3

Я показываю сцену с несколькими кубами в ней. Камера использует персектив. Все прекрасно работает, но мне бы хотелось, чтобы вертикальные линии были параллельны (двухточечная перспектива:http://en.wikipedia.org/wiki/Perspective_(graphical)#Two-point_perspective).

При просмотре куба спереди:

Что я хочу:

+-----+
|     |
|     |
+-----+

Что я получаю (преувеличено):

+--------+
 \      /
  \    /
   +--+

Я пытался поиграть с полем зрения камеры, но безрезультатно.

My attempt so far:

Camera = SceneManager.CreateCamera(CameraName);
float q = 45;
float d = 5000f;
Matrix4 m = new Matrix4(
    1, 0, 0, (float)(Math.Sin(q)/d),
    0, 1, 0, 0,
    0, 0, 1, (float)(Math.Cos(q)/d),
    0, 0, 0, 0
    );
Camera.SetCustomProjectionMatrix(true, m);
Прикосновение к полю зрения вам не поможет. Я раньше не сталкивался с двухточечной перспективой в компьютерной графике, но думаю,should быть возможным ChrisF♦

Ваш Ответ

1   ответ
5

В Университете Беркли есть страница о различных перспективных преобразованиях и матрицах, которые вам нужно использовать. Двухточечная перспективная трансформация:

  _                    _
 |  1   0   0 sin(q)/d  |
 |  0   1   0     0     |
 |  0   0   1 cos(q)/d  |
 |_ 0   0   0     0    _|

кудаq угол, используемый для поворота точек (а не осей) иd (необъяснимо (!), но я думаю, что это расстояние камеры от фокальной плоскости.

enter image description here

Источник

@TeunvanVegchel - я обновил свой ответ на основе новой информации
Еще раз спасибо! Я пробовал весь диапазон значений для d (0 ... 1, 1 ... 100, 1000+, также отрицательное значение), но мой экран остается пустым. Смотрите мой обновленный ответ для моей настройки до сих пор. Teun van Vegchel
Просто чтобы быть уверенным, я нашел то, что я хочу в Википедии:Two point perspective, Но Огре это не поддерживает? Teun van Vegchel
@TeunvanVegchel - параллельная проекция на одну ось и перспективу на другие невозможна.
Спасибо за ваш быстрый ответ. Я установилCamera.ProjectionType = ProjectionType.PT_ORTHOGRAPHIC; но это приводит к тому, что все оси параллельны, а не только вертикальная (у?). Я также попытался добавитьCamera.SetCustomProjectionMatrix(true, new Matrix4(1,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,1)); но тогда я просто получаю сплошные цвета (как будто камера была увеличена очень, очень близко). Teun van Vegchel

Похожие вопросы