Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > GUI Direct3D


Автор: KoZliK 4.2.2010, 01:32
Подскажите пожалуйста, как реализовать пользовательский интерфейс под Direct3D. Обработка событий, отрисовка котролов(спрайтами или ещё как-то). Смотрел пример CustomUI из DirectX SDK но не смог разобраться там пока. Пишу под Windows Mobile на C#, но в соответствующем разделе форума подраздела типа "managed DirectX" нету, так что задаю вопрос тут. Понимаю, что C++ и C# языки разные, но мне нужна лишь идея. Больше всего интересует вторая часть вопроса. Пока что... спасибо)

Автор: Static 4.2.2010, 10:44
я как-то делал супер простенький GUI (правда на OpenGL) - квадратики с текстурой были контролами. 
Обработка событий мало зависит от используемого ГАПИ - это чисто вопрос проектирования. Я делал небольшую иерархию классов (например: Контрол-Окно-Кнопка), содержащих указателями на функции.
Например, контрол имел метод OnMouseMove, который вызывал функцию по указателю. Этот указатель сообщался контролу функцией типа SetEvent. Далее происходила проверка - движется ли мышь над контролом. Если да - вызывается OnMouseMove. Там проверяется - корректен ли "привязанный" указатель функции. Если корректен - вызывается нужная функция. Как-то так.

Автор: KoZliK 4.2.2010, 13:48
Спасибо вы только что подкинули мне идею) Я хотел использовать кнопки с закругленными углами. Но при таком подходе при изменении размеров контрола, текстура бы растягивалась черт знает куда. ну а если поделить допустим, кнопку на 9 частей, то все получится:

недеформ. угол            | деформ.горизонтальный бордюр |           недеформ. угол
-----------------------------------------------------------------------------------------------------------
деформ. верт. бордюр|                                                         | деформ. верт. бордюр         
------------------------------------------------------------------------------------------------------------         
недеформ. угол            | деформ.горизонтальный бордюр |           недеформ. угол

тогда контрол можно будет натянуть на примитив и растягивать как угодно.

Автор: Static 4.2.2010, 17:11
KoZliK, насчет 9-ти частей - обычно так и делают. Я в своем примере заморачивался по минимуму, поэтому у меня обычные квады были с альфа-текстурой.
Кстати, много по этому поводу есть на gamedev.ru - но там контингент злой smile лучше сначала читать - а потом спрашивать.

Автор: KoZliK 4.2.2010, 17:27
Static, спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)