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


Автор: darkAv 17.11.2009, 12:08
Ребят подскажите пожалуйста как сделать примитивное UI в OpenGL фон я загрузил при помощи режима Ortho2D к примеру создать кнопку и сделать чтобы она была кликательная?

Автор: Static 17.11.2009, 12:18
рисовать в 2D объект, натягивать на него текстуру, менять текстуру в зависимости от поступающих данных (событий мыши  и т.п.)
Самый простой вариант - квадами рисовать контролы.
Т.е. каждый кадр проверяешь - где координаты мыши. Если они над элементом UI - меняем текстуру этого элемента на "подсвеченную" например. Если пришел клик от мыши И мышь над элементом UI - поменять текстуру на "нажатую" и вызвать нужную функцию....

Добавлено через 1 минуту и 30 секунд
Если работал с чем-нить типа Qt или WxWidgets, можешь подсмотреть архитектуру у них. Или взять какой-нить готовый опенсорс GUI и подглядывать там.

Автор: darkAv 17.11.2009, 12:46
а можна по подробней пожалуйста?

Добавлено через 2 минуты и 40 секунд
Цитата(Static @ 17.11.2009,  12:18)
рисовать в 2D объект, натягивать на него текстуру, менять текстуру в зависимости от поступающих данных (событий мыши  и т.п.)
Самый простой вариант - квадами рисовать контролы.
Т.е. каждый кадр проверяешь - где координаты мыши. Если они над элементом UI - меняем текстуру этого элемента на "подсвеченную" например. Если пришел клик от мыши И мышь над элементом UI - поменять текстуру на "нажатую" и вызвать нужную функцию....

всмысле обьясни пожалуйста как можна так сделать?

Автор: Static 17.11.2009, 14:31
Цитата(darkAv @  17.11.2009,  11:46 Найти цитируемый пост)
а можна по подробней пожалуйста?

Давай тогда начнем с того - что ты уже умеешь? Кроме "вывода фона".

Автор: darkAv 17.11.2009, 14:47
я сделал окно в котором у меня создаеться прямоугольник в режиме ortho на весь экран и на него натягиваеться текстура

Автор: Static 17.11.2009, 14:59
Сам сделал или просто скопировал откуда-то? Если сам - тогда в чем проблема сделать еще прямоугольников с другими текстурами и размерами?
Если не сам - то надо разбираться, а не копипастить. Вот http://pmg.org.ru/nehe/index.html.

Автор: darkAv 17.11.2009, 15:02
я по ним и разбираюсь

Добавлено через 10 минут и 23 секунды
прямоугольники я сделал с текстурой просто я не знаю как сделать ее кликательной

Автор: Static 17.11.2009, 15:34
ок.
У тебя же есть обработка событий мыши?
"Кликательная" кнопка - это прямоугольник с тремя текстурами. Текстуры: "нормальная", "активная" и "нажатая". В зависимости от сообщения мыши эти текстуры надо менять.

Автор: darkAv 17.11.2009, 15:41
Цитата(Static @ 17.11.2009,  15:34)
ок.
У тебя же есть обработка событий мыши?

нет в этом и загвоздка я не знаю как ее сделать

Автор: Static 17.11.2009, 15:42
Если нет обработки событий мыши - смотри тот кусок кода, где
Код

switch (uMsg)
{
case ....
}

Там должны быть еще
Код

case WM_MOUSEMOVE: //мышь двигается
***
break;

case WM_LBUTTONDOWN: //нажата левая кнопка
***
break;

case WM_LBUTTONUP: //отпущена левая кнопка
***
break;


При получении всех этих сообщений у тебя в переменной lParam будут координаты мыши
Код

mouseX = LOWORD(lParam);
mouseY = HIWORD(lParam);

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

Автор: darkAv 17.11.2009, 15:48
спс за развернутый ответ. а если еше вопросы появяться можн в личку сообшения кидать?

Автор: Static 17.11.2009, 15:49
Кидай конечно.. Я, правда, оперативности ответов не гарантирую.
Хотя лучше бы все на форуме обсудить - может еще кому пригодится.

Автор: darkAv 17.11.2009, 16:02
я нарисовал сумку как сделать чтобы поля были активными рисовать в каждой клетке полигон?

Автор: Static 17.11.2009, 16:04
 smile какую сумку?

Автор: darkAv 17.11.2009, 16:04
user posted image

Добавлено через 7 минут и 22 секунды
вот для рпг( так что каждую секцию нужно отрисовывать поликами)?

Автор: Static 17.11.2009, 16:14
ну да... каждый элемент прийдется рисовать...

 smile 
имхо, не с того конца ты за РПГ взялся... 

Автор: darkAv 17.11.2009, 16:22
я пока просто теорию изучаю smile

Добавлено через 6 минут и 13 секунд
а скажи плз как сделать свой курсор?( делаю полик накладываю текстуру скрываю оригинальный) а как сделать чтобы мой полик бегал за курсором?

Автор: Static 17.11.2009, 16:44
в case WM_MOUSEMOVE меняешь координаты своего полика на координаты мыши.

Автор: darkAv 17.11.2009, 16:46
а ф-цию мож примерную показать?

Автор: Static 17.11.2009, 16:57
 smile функцию присвоения координат?... Раз уж изучаешь теорию, попробуй хоть до чего-нить сам додуматься.

Автор: darkAv 17.11.2009, 16:58
ok и на этом спасибо

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