Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 29.04.2012, 09:49   #1
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Вопрос Изменение размера области рендера

Использую функцию xSetRenderWindow для вывода графики в элемент управления на форме. Не могу понять, как правильно изменять размер этой области. Делаю так: (код PowerBasic 10)

...
xSetRenderWindow hCtl        'set render area to image control
xSetTopWindow  hDlgMW        'set main window as input window
...
xGraphics3D(DWidth& ,DHeight& ,0,0,0)     'Desktop width and height
...
далее обрабатываю сообщение WM_SIZE:

cw = LO(WORD, CB.LPARAM)                    'new main window width
ch = HI(WORD, CB.LPARAM)                    'new main window height
CONTROL SET SIZE hDlgMW,2,cw*0.70,ch        'image contol width=70% width of main window

xCameraViewport(Camera, 0, 0, cw, ch)        'is it correct???

DIALOG SET TEXT hDlgMW,STR$(cw)
xcls
Render3d
но получаю такое:


В чем может быть прикол? Идеи есть?
Миниатюры
Нажмите на изображение для увеличения
Название: Resizing.png
Просмотров: 1275
Размер:	50.2 Кб
ID:	16729  
(Offline)
 
Ответить с цитированием
Старый 29.04.2012, 13:47   #2
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Изменение размера области рендера

А если просто изменить размер области просмотра камеры? Например было столько - то а при нажатии кнопки изменить. Изменится или нет?
(Offline)
 
Ответить с цитированием
Старый 29.04.2012, 18:44   #3
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Ответ: Изменение размера области рендера

Судя по всему, viewport создается и ресайзится правильно, трабла в стретчинге (stretch) окна вывода (использую image control). Только не пойму, трабла в xors3d или PB10...
(Offline)
 
Ответить с цитированием
Старый 30.04.2012, 08:54   #4
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Радость Ответ: Изменение размера области рендера

УРА! Разобрался!

Пришлось помудрить, но результат того стоит. Вот основная идея сабжа:

Идея состоит в том, что лишняя часть картинки рендера обрезается и показывается только область viewport.

1) Установить размер бекбуфера равный текущему разрешению рабочего стола
2) Установить viewport равный области вывода
3) областью вывода будет IMAGE CONTROL

Но тут есть ньюанс:

1. Если напрямую изменять размер IMAGE CONTROL, то картинка рендера растягивается (как в посте 1)

Для преодоления данного ограничения воспользуемся дополнительным родительским элементом FRAME, засунув в него IMAGE CONTROL. Изменять размеры будем не IMAGE CONTROLа (размеры которого установим равными размерам рабочего стола), а именно FRAME контрола, который скроет "лишнюю" часть области рендера (IMAGE контрола) и будет содержать только область Viewport`а.

Размеры окна теперь можно без проблем менять:

Миниатюры
Нажмите на изображение для увеличения
Название: Resizing2.png
Просмотров: 1285
Размер:	194.1 Кб
ID:	16738  
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (02.05.2012)
Старый 01.05.2012, 08:56   #5
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Ответ: Изменение размера области рендера

Единственное, с чем нужно еще разобраться - при изменении размера главного окна область рендера "мигает", что сильно напрягает. Есть идеи как это пофиксить?
(Offline)
 
Ответить с цитированием
Старый 01.05.2012, 09:27   #6
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Ответ: Изменение размера области рендера

Вот и нашел решение (слишком быстро, чем ожидал):

надо вместо контейнера FRAME использовать GRAPHIC со стилем окна %WS_CLIPCHILDREN, а дочерний элемент тоже использовать GRAPHIC. Тогда мелькания не будет. У главного окна тоже должен быть стиль %WS_CLIPCHILDREN.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (02.05.2012)
Старый 08.05.2012, 17:24   #7
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений
(для 410 пользователей)
Re: Изменение размера области рендера

А проблем с управлением (мышь, клава) не возникает? На пурбейсике когда то меня подобный трик остановил только из-за затыков с инпутом
(Offline)
 
Ответить с цитированием
Старый 09.05.2012, 13:29   #8
bugway
ПроЭктировщик
 
Аватар для bugway
 
Регистрация: 19.03.2012
Адрес: Забайкальский край
Сообщений: 112
Написано 15 полезных сообщений
(для 23 пользователей)
Ответ: Изменение размера области рендера

Для корректной работы с вводом нужно ОБЯЗАТЕЛЬНО использовать функцию:

xSetTopWindow  hDlgMW        'set main window as input window
где параметр hDlgMW - это hWND того окна, которое будет обрабатывать сообщения.
(Offline)
 
Ответить с цитированием
Старый 09.05.2012, 14:35   #9
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений
(для 410 пользователей)
Re: Изменение размера области рендера

Я начинал когда еще не было этой функции. Теперь извраты с хуками на окно не нужны ))
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com