Как сделать так, чтобы при разворачивании окна на весь экран 3д модели не вытягивались в ширину?
При изменении размеров окна изменяй настройки камеры
попробуйте поставить
Camera->setFOV(Angle * Height / Width);
Angle = угол обзора (задается в радианах)
Height и Width - размер окна.
Попробовал, получилось прикольно, что - то на вроде фильтра radial blur, только раз сто круче выглядит:)
Наверно надо перефразировать вопрос, как изменять разрешение окна во время работы программы?
У Вас должно было выглядеть, примерно, так:
вызывается при событии изменения размеров окна
Camera->setFOV(1.5*Device->getVideoDriver( )->getScreenSize( ).Height/Device->getVideoDriver( )->getScreenSize( ).Width);
Скорее всего угол задавали в градусах, а нужно в радианах..
В классе 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. Теперь указатель мыши смотрит точно вверх, а на движения мыши поворачивается против часовой стрелки.
Логически я не могу понять как на это могла повлиять строка кода...
При разворачивании окна на полный экран гнома с топором не хило разносит в ширину, а при сужении он вытягивается. Т.е. ни чего не изменилось, или я ни чего не понял:)
Я тоже заметил, этот баг. :/
Насколько я понимаю, при расчете смещения мыши, используется координаты центра окна которые определены после вызова конструктора create, а при событии "resize" не изменяются.
Насколько я знаю в иррличте нет возможности менять разрешение "на лету" без ущерба для сцены. Единственный выход - сохранить сцену, закрыть и заново запустить device. Для этого можно воспользоваться этим способом.
Evgeniy_Shavrov, Evgeniy_Shavrov спасибо, буду думать...
есть вариант, сам менял разрешение
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); }
вот этой функцией я коррректировал искажения отображения камеры после изменения размера окна (разрешения экрана)
mamont крут! Метод работает! Спасибо!
Тема в архиве.