• Belorus © (09.01.07 16:55) [0]
    Прошу прощения за тупое название темы...

    Вопрос совершенно простой. Но я не в теме поэтому даже таких примитивных вещей не знаю.

    Есть маленькая 3д сцена работающая под руководством GLScene. Там крутятся щарики, цилиндры и разные прибамбасы.

    А мне нужно рисовать своего рода GUI интерфейс поверх всего этого. К сожаления воспользоваться TGLGui компонентами не представляется возможным из за недостаточной для меня функциональности.
    Поэтому мне придётся видимо весь гуи рисовать через OpenGL поверх всей этой кухни. И сразу возник вопрос как мне рисовать GUI чтобы он был скажем так статичен и был всегда по краям экрана ?
    Я пока представляю это так.
    Сделать трансляцию координат через glTranslatef чтобы рисование происходил как раз в плоскости экрана, и рисовать.(Изначально 0,0,0 у меня где то вдали от камеры.)
    Но почему то закралась мысль что можно это сделать как нибудь проще или есть какие нибудь функции OpenGL, которые будут работать быстрее за счёт того что рисование будет происходить не в 3д пространстве сцены а в 2д пространстве экрана...

    Напищите если не трудно как это обычно делается ...
  • Fosgen (10.01.07 01:31) [1]
    Если по-тупому, то обычно (под GLScene) берутся объекты типа TGLHUDSprite и ими рисуются элементы интерфейса в плоскости экрана.  OGL в принципе работает ТОЛЬКО в трехмерности. Поэтому дяди сделавшие GLScene изначально побеспокоились о создании компонента (TGLHUDSprtie) работающего ТОЛЬКО в плоскости экрана.
  • Belorus © (10.01.07 17:22) [2]
    > [1] Fosgen   (10.01.07 01:31)
    > Если по-тупому, то обычно (под GLScene) берутся объекты
    > типа TGLHUDSprite и ими рисуются элементы интерфейса в плоскости
    > экрана.  OGL в принципе работает ТОЛЬКО в трехмерности.
    > Поэтому дяди сделавшие GLScene изначально побеспокоились
    > о создании компонента (TGLHUDSprtie) работающего ТОЛЬКО
    > в плоскости экрана.


    Дело в том что если я буду рисовать весь GUI через TGLHUD то наверняка скорость будет просто мизерной... Создавать лишнюю прослойку из компонентов достаточно универсальных - опасное дело :'(

    А может я преувеличиваю ?
    И насколько удобно будет делать реализацию компонентов GUI через TGLHUDSprite ?
  • Fosgen (10.01.07 19:06) [3]
    А может ты посмотришь исходник TGLHUDSprite и поймешь что "Создавать лишнюю прослойку из компонентов достаточно универсальных" - то же самое что придется делать тебе...
    Ты хочешь делать "трансляцию координат через glTranslatef ", дык а по твоему - люди писавшие TGLHUDSprite что сделали-то?

    Или я просто не понимаю - чего ты хочешь...
    Хочешь - пиши свой класс GUI, со своими компонентами...
    Тебе интерфейс-то какой сложности надо? Сколько процент перекрытия экрана, и сколько одномоментно активных компонент интерфейса?
  • ors_archangel © (10.01.07 19:27) [4]

    > А может я преувеличиваю ?

    Не может, а точно
  • Belorus © (11.01.07 22:56) [5]
    > [3] Fosgen   (10.01.07 19:06)
    > Или я просто не понимаю - чего ты хочешь...
    > Хочешь - пиши свой класс GUI, со своими компонентами...
    > Тебе интерфейс-то какой сложности надо? Сколько процент
    > перекрытия экрана, и сколько одномоментно активных компонент
    > интерфейса?


    Покрытие от 20% до 100%, будет меняться. Одновременно активен только один компонент.
    Интерфейс как у обычной стратегии. Только у меня не игра, а интерактивная задачка по физике.
    Видимо на самом деле придётся писать все свои компоненты GUI интерфейса.

    Спасибо за ответы.
  • Belorus © (11.01.07 23:01) [6]
    Ой совсем забыл...

    У меня возник вопрос как рисовать куски компонентов используя TGlHUDSprite.
    Когда я писал обычные компоненты вопроса не возникало, ибо рисование шло по Canvas'у. А как рисовать по TGlHudSprite ?
    Мне в первую очередь нужно реализовать ListBox компоненту. Каким образом выводить надписи и.т.д ?

    Заранее ещё раз спасибо за ответ.
  • Спрайт (12.01.07 03:23) [7]

    > Belorus ©

    На самом деле сделать обычные компоенты в 3D очень сложно. Даже просто TPanel или TLabel. Потому, что там масса параметров, выравниваний, переносов. Кроме того масса событий, которые часто вообще непонятно как делать.

    Поэтому все эти визуальные компоненты крайне недоделанные.
    В общем сильно удивлюсь, если у тебя получится.
  • Грибоед (12.01.07 13:15) [8]
    Если это не игра, и интерфейсов должно быть много, то проще всего использовать привычные компоненты для создания интерфейса программы.
  • Fosgen (12.01.07 18:44) [9]
    По TGLHUDSPrite'ту "рисуется" как по любому обычному примитиву - ТЕКСТУРОЙ.

    А надписи судя по всему придется выводить TGLHUDText'ом... ты бы почитал доку по GLScene, прежде чем браться... А то вот как всегда - санчала не разберутся толком, а потом хаят - то им плохо, это им сложно реализовано, вот то - криво... А если ты собрался делать все это в том же стиле как ты рисовал по канвасу - флаг тебе в руки - далеко ты не уедешь... Кнопку с надписью - тоже по пиксельно вырисовывать? Интересно на какое быстродействие ты в таком случае рассчитываешь...

    Учти что при перекрытии экрана в 100% - причем одним элементом - быстродействие будет зависеть от параметров текстуры используемой для элемента...

    Лично я когда интерфейс делал - сделал подмену компонентов на этапе компиляции. Т.е. - форму (и все VCL) делаешь стандартными (обычный design-time в Дельфи), а на этапе компиляции и при работе Дельфя "не глядя" хватает мои компоненты, размещает их так как стандартные аналоги лежали на форме и придает им те же размеры.
    Самое главное - я могу и обработчики им сразу назначить как стандартным VCL.

    Компоненты сделаны - как тектурированные квады, "оттранслированные" на плоскость экрана.
    Текстура - шкурка рисуется как обычный битмап. "Натягивается" на квад - заурядным способом...

    Делал я этот вариант - трое суток из исходников стандартных VCL не вылазил... Сделано все БЕЗ вмешательства в стандартные модули - все изменения только в моем коде.
  • Belorus © (12.01.07 19:01) [10]
    > [9] Fosgen   (12.01.07 18:44)
    > По TGLHUDSPrite'ту "рисуется" как по любому обычному примитиву
    > - ТЕКСТУРОЙ.

    Ну тогда примерно опиши мои действия при прокрутке ListBox.
    Какую мне текстуру накладывать чтобы отрисовку элементов сделать ?
    >
    > А надписи судя по всему придется выводить TGLHUDText'ом...
    > ты бы почитал доку по GLScene, прежде чем браться... А то
    > вот как всегда - санчала не разберутся толком, а потом хаят
    > - то им плохо, это им сложно реализовано, вот то - криво...
    > А если ты собрался делать все это в том же стиле как ты
    > рисовал по канвасу - флаг тебе в руки - далеко ты не уедешь...

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

    >
    > Кнопку с надписью - тоже по пиксельно вырисовывать?

    Где я такое писал ?

    Только что-то я тебя не понимаю.. Ты сперва пишешь что нужно использовать TGLHudSprite, теперь пишешь что рисуешь через GL_QUAD с наложеной текстурой. Ты определись...
  • Fosgen (18.01.07 20:48) [11]
    Belorus ©   (12.01.07 19:01) [10]

    Не, это ты определись - хочешь ты свое писать или ты хочешь пользовать стандартные компоненты в GLS.
    Кстати тот же самый TGLHudSprite, реализован тем же самым GL_QUAD, с наложенной текстурой. Или ты решил что это такой примитив в OGL'е есть - TGLHudSprite?
    Так что я ничем себе не противоречу. А если ты этого не догоняешь - значит не своевременно занялся данным вопросом.

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

    Ну тогда примерно опиши мои действия при прокрутке ListBox.
    Какую мне текстуру накладывать чтобы отрисовку элементов сделать ?


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

    Тебе ответили что делать. Даже ответили на вторичные вопросы. Теперь же ты грузишь вопросом "опиши"... А сам-то что-нибудь делать собираешься?
  • ProG © (23.04.07 15:30) [12]
    ЛЮДИ пож объясните как из 3д макса в GLScene вместе с текстурами
    и чтобы быстро и легко
  • ProG © (23.04.07 15:31) [13]
    объект загрузить
  • Conferno (29.06.07 13:52) [14]
    Если не удобно рисовать стандартными Сценовскими компонентами - добавь в конец йерархии Сцены компонент TGLDirectOpenGL и в OnRender вписывай чистый OGL код...
  • KiriX © (09.07.07 17:20) [15]
    Вообще-то не обязательно весь HUD программировать, если умеешь водить в Фотошопе - нарисуй весь интерфейс и вставь через GLSceneEditor!!!
  • Rial © (09.07.07 18:43) [16]
    > [0] Belorus ©   (09.01.07 16:55)

    Если тебе нужно, могу дать исходник свой,
    в котором реализовал
    TLabel, TWrapLabel, TButton, TCheckBox, TSwitch,
    TMenuItem, TMEnuList, TTrackBar, TTrackCircle, TProgressBar, TEdit.
    На чистом OpenGL, пока на стадии разработки.
    Но! Дам не все требуемые дополнительно модули: заменишь их на свои,
    функциональность у них там по сути простая. ;)
Есть новые Нет новых   [134431   +10][b:0][p:0.001]