Войти
IrrlichtФорум

Изменение размеров окна.

#0
23:41, 20 фев 2010

Как сделать так, чтобы при разворачивании окна на весь экран 3д модели не вытягивались в ширину?

#1
14:33, 21 фев 2010

При изменении размеров окна изменяй настройки камеры

попробуйте поставить
Camera->setFOV(Angle * Height / Width);

Angle = угол обзора (задается в радианах)
Height и Width - размер окна.

#2
21:54, 21 фев 2010

Попробовал, получилось прикольно, что - то на вроде фильтра radial blur, только раз сто круче выглядит:)
Наверно надо перефразировать вопрос, как изменять разрешение окна во время работы программы?

#3
23:47, 21 фев 2010

У Вас должно было выглядеть, примерно, так:

вызывается при событии изменения размеров окна

  Camera->setFOV(1.5*Device->getVideoDriver()->getScreenSize().Height/Device->getVideoDriver()->getScreenSize().Width);

Скорее всего угол задавали в градусах, а нужно в радианах..

#4
0:30, 22 фев 2010

В классе MyEventReceiver ( играюсь с примером 09, meshviewer) описал событие EGDI_WINDOW_RESIZE:

case EGDI_WINDOW_RESIZE:
  {           Device->getSceneManager()->getActiveCamera()->setFOV(2.1*Device->getVideoDriver()->getScreenSize().Height/Device->getVideoDriver()->getScreenSize().Width);
        break;
  }

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

#5
10:42, 22 фев 2010

Я тоже заметил, этот баг. :/

Насколько я понимаю, при расчете смещения мыши, используется координаты центра окна которые определены после вызова конструктора create, а при событии "resize" не изменяются.

#6
14:59, 22 фев 2010

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

#7
16:09, 22 фев 2010

Evgeniy_Shavrov, Evgeniy_Shavrov спасибо, буду думать...

#8
10:39, 23 фев 2010

есть вариант, сам менял разрешение

void SetCameraView(int width, int height, ICameraSceneNode* cam)
{
  matrix4 m,m2,m3;
  m = cam->getProjectionMatrix();

  f32 wd = (f32)(width*3.651*(1.0/1000.0));
  f32 hg = (f32)(height*3.651*(1.0/1000.0));
  m2.buildProjectionMatrixPerspectiveLH(wd,hg,cam->getNearValue(),cam->getFarValue());
  cam->setProjectionMatrix(m2);
}

вот этой функцией я коррректировал искажения отображения камеры после изменения размера окна (разрешения экрана)

#9
10:43, 25 фев 2010

mamont крут! Метод работает! Спасибо!

IrrlichtФорум

Тема в архиве.