ПроектыФорумОцените

MyGUI v3.2.0 Released! (11 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#150
12:58, 7 фев 2015

Про Ogre2.0 - http://www.ogre3d.org/addonforums/viewtopic.php?f=17&t=30366
Пулл реквесты приветствуются, но лучше сначала там отписаться, если есть конкретные предложения.

Про RTT и ввод - надо смотреть RTT Layer Demo (там где 3д пульт управления с гуи на нем), но если коротко, то ввод обрабатывается внутри слоя отдельно, и видимо при вызове injectMouse*** событий надо иметь доступ к проверке, на каком мы сейчас окне и обрабатывать/не обрабатывать ввод.
Про архитектуру под неколько окон - думаю, что не позволит без существенных изменений, да и не хотелось бы включать столь редкую логику в ядро гуя. Если вдруг получится сделать отдельной платформой/внешним кодом, то сможем принять.

#151
16:23, 7 фев 2015

Altren
> Про RTT и ввод - надо смотреть RTT Layer Demo (там где 3д пульт управления с
> гуи на нем), но если коротко, то ввод обрабатывается внутри слоя отдельно, и
> видимо при вызове injectMouse*** событий надо иметь доступ к проверке, на каком
> мы сейчас окне и обрабатывать/не обрабатывать ввод.
может быть, мы о каких-то разных демо говорим? у меня при установке юниттестов появляется RTT Layer Demo, но оно выглядит как одно окно, на котором рендерится другое и не реагирует ни на какие контролы. куда смотреть?4

> Про архитектуру под неколько окон - думаю, что не позволит без существенных изменений, да и не хотелось бы включать столь редкую логику в ядро гуя. Если вдруг получится сделать отдельной платформой/внешним кодом, то сможем принять.
я бы не стал называть задачу столь редкой при таком огромном количестве реквестов на неё:
http://www.ogre3d.org/addonforums/viewtopic.php?f=17&t=14847
http://www.ogre3d.org/forums/viewtopic.php?f=1&t=78390
http://www.ogre3d.org/addonforums/viewtopic.php?f=17&t=12889
http://www.ogre3d.org/forums/viewtopic.php?f=25&t=82696
http://www.ogre3d.org/forums/viewtopic.php?f=3&t=40234

Да и, собственно, зачем делать синглтоном то, что синглтоном по сути не является? Почему-то осознание этой нехитрой истины дошло до разрабов того же CEGUI только в последнем релизе - им пришлось достаточно сильно пересматривать архитектуру, чтобы удалять синглтоны из инпута, из рутвиджетов и прочего. Я виню именно этот антипаттерн.

Ещё вопрос по коду - почему в mygui встречается существенное количество русских комментариев? Разве это не сказывается на негативно на международной репутации библиотеки?

#152
3:06, 8 фев 2015

Suslik
> может быть, мы о каких-то разных демо говорим? у меня при установке юниттестов
> появляется RTT Layer Demo, но оно выглядит как одно окно, на котором рендерится
> другое и не реагирует ни на какие контролы. куда смотреть?4
Да, я ошибся. UnitTest_Layers. В котором в результате получается вот такое: http://www.youtube.com/watch?v=J-FeieAFLGM

Про многооконность - я не видел, чтобы гуи подобного рода использовали в многооконных приложениях и считаю, что он для этого плохо подходит. Я бы рекомендовал использовать Qt или что-то подобное, если речь идет о окнах.

Про синглтон - уже очень давно было осознание того, что они не к месту, но обратная совместимость и отсутствие сильной необходимости отказа от них останавливало задачу.

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

#153
3:20, 8 фев 2015

Altren
> Да, я ошибся. UnitTest_Layers. В котором в результате получается вот такое:
> http://www.youtube.com/watch?v=J-FeieAFLGM
>
Да, но сэр, в этом примере у гуя только в одном таргете есть активные виджеты, поэтому с разделением инпута для каждого рендертаргета проблем нету. или я что-то не так понял?

#154
13:53, 8 фев 2015

Да, все верно. С разными рендер таргетами придется писать дополнительную логику, т.к. просто слоев и их перекрытия будет недостаточно.

#155
14:48, 8 фев 2015

Altren
то есть я правильно понимаю, что несколько интерактивных независимых формочек окне одновременно в зоне видимости даже в одном win32 сделать без модификации ядра не удастся? это же, вроде как, вовсе не экзотический случай, во многих играх бывает несколько ingame-интерактивных консолей да компьютеров?

#156
15:00, 8 фев 2015

Значит я неверно понял вопрос. В том демо можно добавить обычные элементы интерфейса на экран и они будут работать нормально, находясь "над" или "под" объектами на сцене (зависит от того, на каком слое находится элемент и порядка слоев).

#157
22:52, 8 фев 2015

слушай, ну неужели я настолько непонятно формулирую вопросы, что уже две страницы не получается найти на них ответы? не интересует "над" и "под". интересуют два гуя в рамках одного контекста, не лежащих в одной плоскости(то есть у них координаты мыши у каждого будут свои). отображать такие гуи, очевидно, можно посредством рендертаргетов. как каждому из них направить свои координаты для мыши?

#158
23:55, 8 фев 2015

В UnitTest_Layers это реализовано, надо смотреть там на логику в RTTLayer::getLayerItemByPoint и RTTLayer::getPosition. Если коротко, то обычный слой просто берет входные координаты, а RTTLayer из той демки делает raytracing.

#159
0:39, 9 фев 2015

Куда смотреть-то? Вот один метод:

  ILayerItem* RTTLayer::getLayerItemByPoint(int _left, int _top) const
  {
    if (!mIsPick)
      return nullptr;

#ifdef MYGUI_OGRE_PLATFORM
    const MyGUI::IntSize& size = MyGUI::RenderManager::getInstance().getViewSize();
    bool result = pickPositionInObject(_left, _top, size.width, size.height, mTextureSize.width, mTextureSize.height);
    if (result)
    {
      return Base::getLayerItemByPoint(_left, _top);
    }
#endif

    return nullptr;
  }

Вот второй:

IntPoint RTTLayer::getPosition(int _left, int _top) const
  {
    if (!mIsPick)
      return Base::getPosition(_left, _top);

#ifdef MYGUI_OGRE_PLATFORM
    const MyGUI::IntSize& size = MyGUI::RenderManager::getInstance().getViewSize();
    bool result = pickPositionInObject(_left, _top, size.width, size.height, mTextureSize.width, mTextureSize.height);
    if (result)
    {
      mOldPoint.set(_left, _top);
    }
#endif

    return mOldPoint;
  }

Вот их реализация в базовом классе:

  IntPoint OverlappedLayer::getPosition(int _left, int _top) const
  {
    return IntPoint(_left, _top);
  }
  ILayerItem* OverlappedLayer::getLayerItemByPoint(int _left, int _top) const
  {
    if (!mIsPick)
      return nullptr;

    VectorILayerNode::const_reverse_iterator iter = mChildItems.rbegin();
    while (iter != mChildItems.rend())
    {
      ILayerItem* item = (*iter)->getLayerItemByPoint(_left, _top);
      if (item != nullptr)
        return item;
      ++iter;
    }
    return nullptr;
  }

А теперь, внимание, вопрос. Какое отношение логика пикинга вообще имеет к обработке инпута? У меня вопрос был не как определить, в какую из форм мы ткнули мышью, а как инжектировать именно нужной форме сообщение о том, что в неё ткнули. В представленном коде вообще ничего про инжекцию не увидел.

#160
1:46, 9 фев 2015

Altren
Сегодня я скачал MyGUI, установил все зависимости указанные в readme - directX SDK, MS Visual C++ и все исполняемые файлы из каталога bin могли запускаться, но я не нашел в них ничего функционального, только некие примеры. Как нужно пользоваться программой и на сколько полезен MyGUI для дизайнера программного интерфейса?

#161
2:09, 9 фев 2015

If
> только некие примеры
было бы странно, если бы ты нашёл в примерах что-то кроме примеров

If
> Как нужно пользоваться программой и на сколько полезен MyGUI для дизайнера
> программного интерфейса?
поставь в cmake'е галку, чтобы билдил тулзы тоже. в комплекте есть визуальный редактор.

#162
2:41, 9 фев 2015

Все забываю спросить:
1) Есть ли внутренние оптимизации когда элементы перекрывают друг друга (панель перекрывает частично другую панель и еще сверху панелька перекрывает частично нижележащие)? Тут рисуется все от нижнего к верхнему или наоборот, но уже с тестом глубины? Как понимаешь, в первом случае получаем ненужный оверхед, а во втором случае хапаем проблем блендовыми и не блендовыми элементами.
2) Текстура одна, кнопка рисуется без бленда, а текст на ней с блендом. Мы получаем два дипа на одну кнопку или встроена логика компоновки без блендовых и блендовых элементов в два разных дипа? Опять таки что происходит когда такие элементы частично перекрывают друг друга?
Можно просто ткнуть в описание архитектуры рендера, сам не нашел.

#163
18:39, 9 фев 2015

Suslik
Инжектировать нужно из всех окон одинаково. Потом в слои будет попадать в логику пикинга и если мы тыкали в другом win32 окне, значит просто идем дальше.
Ну и конечно надо добавить делегаты на желаемые события, например eventMouseButtonClick для простых кнопок.
Важный момент - писать прийдется сравнительно много, демка Layers была приведена в качестве примера, т.к. ничего более подходящего готового нет.
If
> Как нужно пользоваться программой и на сколько полезен MyGUI для дизайнера программного интерфейса?
MyGUI - это в первую очередь GUI библиотека, т.е. чтобы была любая логика все равно нужно писать код. Если хочется набросать интерфейс, то конечно можно использовать LayoutEditor (идет в комплекте с собранными демками и по умолчанию он тоже собирается), но для дизайнера, который не пишет код, MyGUI точно не подходит.
Zloten
> Все забываю спросить:
> 1) Есть ли внутренние оптимизации когда элементы перекрывают друг друга (панель
> перекрывает частично другую панель и еще сверху панелька перекрывает частично
> нижележащие)? Тут рисуется все от нижнего к верхнему или наоборот, но уже с
> тестом глубины? Как понимаешь, в первом случае получаем ненужный оверхед, а во
> втором случае хапаем проблем блендовыми и не блендовыми элементами.
Теста глубины как такового нет, слои жестко заданы и упорядочены, а то что на одном слое рисуется в порядке создания.
Не отрисовывать нижнее нельзя, т.к. по факту почти все гуи хоть немного, но прозрачные.
Да и проверка на перекрытие порой дороже, чем простая отрисовка всего подряд. Не отрисовываются только элементы, которые точно не видны (стоит невидимость или вышли за край родителя/экрана).
> 2) Текстура одна, кнопка рисуется без бленда, а текст на ней с блендом. Мы
> получаем два дипа на одну кнопку или встроена логика компоновки без блендовых и
> блендовых элементов в два разных дипа? Опять таки что происходит когда такие
> элементы частично перекрывают друг друга?
> Можно просто ткнуть в описание архитектуры рендера, сам не нашел.
Есть два типа слоев - Shared и Overlapped.
Shared не знает про перекрытие и рендерит всегда в 1 или 2 дипа (если конечно текстура скина одна, если несколько, то 1 на текст, если есть + число текстур). 1й дип - скин, второй дип - все тексты (даже на разных кнопках и элементах). Т.е. если на таком слое две кнопки перекрываются, то тексты будут поверх обеих и выглядеть будет криво.
Overlapped знает про перекрытие, и у него та же логика, что и у Shared для каждого виджета на нем.

На всякий случай - в логике выше считаются только рутовые виджеты (созданные на слое, а не дочерние). Все дочерние виджеты, если это теоретически возможно, рисуются в том же дипе, что и родитель.

#164
23:05, 9 фев 2015

Altren
> Инжектировать нужно из всех окон одинаково. Потом в слои будет попадать в
> логику пикинга и если мы тыкали в другом win32 окне, значит просто идем дальше.
> Ну и конечно надо добавить делегаты на желаемые события, например
> eventMouseButtonClick для простых кнопок.
ок, видимо, я как-то непонятно изъясняюсь. пусть в игре есть два тачскрина(незавимисых), представляющих из себя игровой объект - интерактивную консоль. каждый из них представляет из себя один checkbox, находящийся посередине экрана. каждый тачскрин - отдельный рендертаргет. пользовательский код сам производит рейкастинг и возвращает, в каких координатах какого из мониторов сейчас находится мышь. далее, если игрок тыкает в середину одной из консолей, он попадает на чекбокс. каким образом нужно инжектировать событие о нажатии кнопки мыши, чтобы сработал только один из чекбоксов? речь уже даже не идёт о нескольких win32 окнах - обе консоли являются текстурами обычных трёхмерных объектов в рамках одного контекста.

Страницы: 18 9 10 11 12 13 Следующая »
ПроектыФорумОцените

Тема в архиве.