![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема при переносе проги из оконного в полный экран в GLScene [Delphi, Windows]
Fosgen © (2005-03-16 19:27:00)Приветствую. Помогите кто чем может. :) Накропал прогу. С помощью GLScene. В оконном режиме. С формой. Решил попробовать ее вполноэкранном режиме. Переделал в DataModule, как в примерах показано. А при выполнении след. начального куска программы:
GLCamera1.SceneScale:=GLSceneViewer1.Width/160;
GLFullScreenViewer1.Active:=True;
if GLFullScreenViewer1.Handle=0 then Exit; //это уже я пробовал - не помогло.
На второй строке при активации вьювера происходит переключение в режим, затем приложение с неизвестной системе ошибкой "валится". Наводит на мысль что в чем-то виноват Cadencer - в примере его не было. При отключении Cadencer'а рисуется черный экран. Но как в таком случае чего рендерить - без Cadencer? В чем я туплю? Подскажите пожалуйста. Заранее спасибо за любой конструктивный ответ.
Fosgen (2005-05-27 13:16:00) [1]2: WandR Чего-то я не понял вопроса - обновляется все автоматически при условии GLCadencer.Enabled:=True; Ну и соответственно при взаимосвязанных GLCadencer & GLScene...
В чем замес?
WandR (2005-05-24 12:45:00) [2]Кто подскажет как в GLFullScreenViewer обновить сцену? Я привык в обычном GLSceneViewer кинул в GLCadencer строку GLSceneViewer1.Invalidate; и все а тут хз че=(
Fosgen (2005-03-23 10:14:00) [3]Архив лежит по адресу adm.trening-omsk.ru сразу - на первой странице. Только за "дизайн" сайта просьба не пинать - это был первый мой сайт и я им не занимался уже года два...
Xeno (2005-03-23 08:40:00) [4]Лучше выложи где-нибудь на обозрение...
Fosgen (2005-03-22 17:01:00) [5]Вот тут подумал - я всякие вопросы задаю, а о чем... Так что ежли кому интересно - могу кинуть мылом архивчик скриншотов того что делаю. 132 кб. JPEG 1024x768...
Xeno (2005-03-22 06:52:00) [6]У меня так реализованно переключение в полноэкранный режим и обратно, по нажатию клавиши:
// полноэкранный режим -
if Key=VK_F4 then Begin
GLSceneViewer1.Visible := GLFullScreenViewer1.Active;
GLFullScreenViewer1.Active := Not GLFullScreenViewer1.Active;
end;
Перед этим при создании формы:
GLSceneViewer1.Camera:=FirstPersonCamera;
GLFullScreenViewer1.Camera:=FirstPersonCamera;
Всякая ерунда обрабытвается в событии от гладенцера, всё работает на ура....
Fosgen (2005-03-22 06:09:00) [7]Дык, сделал, а она - не работает - с той самой вышеуказанной ошибкой. Самая крупная разница между моей прогой и примером - в наличии таймера и каденсера. В примере-то они в цикле все крутили и интерактивность им не требовалась... Я полнедели убил перетаскивая свое "произведение" в формат DataModule, и как оказалось - зазря. :( А с кодом - следующая фигня - если его приводить - то весь придется, а это - 2-3 тыс. строк... То что касалось непосредственно TGLSceneViewer - я привел в самом начале. Это буквально первые строки процедуры TForm1.FormCreate(Sender: TObject); А потом уже всякое остальное (звук, загрузка данных и т.д.) идет. А падало все на GLFullScreenViewer1.Active:=True;
Xeno (2005-03-22 06:04:00) [8]У меня тоже подобный способ работает, только если TGLSceneViewer.visible:=false у меня ничего не пропадает(при условии что камера присвоенна GLFullScreenViewer'у), видюха Radeon9600PRO, жаль никто неможет объяснить почему так происходит...
DeadMeat (2005-03-22 00:25:00) [9]Ну сделай как там..
Я же не зря просил привести весь код. Догадками конечно можно, но долго и тяжко...
---
...Death Is Only The Begining...
Fosgen (2005-03-21 21:04:00) [10]Хто бы их знал... Стоит Detonator версии драйверов 6.14.10.5306. Карта соответственно - GF4 MX400. Винда 2000 SP3 интегрированный... Ну да ладно - пример-то из GLScene'ских работает...
DeadMeat (2005-03-21 19:27:00) [11]Хмм... Фигня какая та... Никогда с тами не сталкивался.. Может дрова? Обычно все на них валят.
---
...Death Is Only The Begining...
Fosgen (2005-03-21 18:32:00) [12]Да и еще - Если выполнить TGLSceneViewer.visible:=false, то на GLFullScreenViewer все тоже пропадает...
Fosgen (2005-03-21 18:31:00) [13]Спасибо, конечно за столь подробную разборку вопроса. Но могу подтвердить следующее - есть форма (обычная TForm) на ней валяется TGSceneViewer, со всеми причиндалами. Когда я пробовал реализовать полноэкранку как в примере к GLScene - получал либо ошибку при GLFullScreenViewer1.Active:=True либо в лучшем случае - просто черный экран. Ошибка была такая что Дельфя ее определить не смогла, при запуске из под чистой винды - та же фигня - неопределимая ошибка. Помогло следующее:
На ту самую первоначальную форму по совету Xeno поставил GLFullScreenViewer и в процедуре TForm1.FormCreate выполняется следующее:
GLSceneViewer1.Cursor:=crNone;
GLFullScreenViewer1.Cursor:=crNone;
GLFullScreenViewer1.Active:=True;
(курсор я в PostRender событии рисую). Работает. Без всяких заморочек. Полноценный полноэкранный. Камеру установил в DesignTime, но переключает и в процессе работы нормально. Почему не хотела как в примере пахать - хто ее знает...
Da Stranger (2005-03-18 16:59:00) [14]Молодец, что умеешь признавать свои ошибки. Удачи :)))
Xeno (2005-03-18 07:28:00) [15]Приношу извинения,я был не прав,как и советовал Da Strange для перехода в полноэкранный режим TGLFullScreenViewer присваивается камера,GLFullScreenViewer1.Active:=True и свойство visible у TGLSceneViewer(если он присутствует) устанавливается в false, вроде как больше ничего не требуется....
Xeno (2005-03-18 06:42:00) [16]>Da Stranger ©
Хотя ты прав конечно, TGLSceneViewer и TGLFullScreenViewer и правда независимы, тем не менее вариант совместного их сипользования всё равно прокатывает...
Xeno (2005-03-18 06:31:00) [17]Правильно или нет,но ведь помогло человеку,а с таким количеством информации по вопросу которую он дал трудновато дать правильный ответ,к тому-же сам учась пока,так что по мере сил.Объясни тогда почему предложенный мной способ работает,да и демках поставляемых с GLScene тоже есть пример подобного использования???
Da Stranger (2005-03-17 15:45:00) [18]
> Строка GLFullScreenViewer1.Camera:=GLCamera не нужна ,GLFullScreenViewer1
> работает со стандартным вьюером,при срабатывании GLFullScreenViewer1.Active:=True;
> изображение берётся из стандартного TGLSceneViewer'а
Извини, конечно, но это бред. TGLSceneViewer и TGLFullScreenViewer НЕЗАВИСИМЫ и один может прекрасно существовать без другого. Посмотри пример \GLScene\Demos\rendering\fullscreen\ Где ты там видишь TGLSceneViewer?? Лучше молчать, чем давать неправильные советы.
Fosgen (2005-03-17 10:49:00) [19]2: Xeno - Спасибо. Я-то полностью от формы отказался - через организацию DataModule, а до предложенного варианта не додумался... Работает однако. ВСех благодар за скорые ответы - не ожидал...
Fosgen (2005-03-17 10:49:00) [20]2: Xeno - Спасибо. Я-то полностью от формы отказался - через организацию DataModule, а до предложенного варианта не додумался... Работает однако.