Конференция "Игры" » Необходимо оптимизировать наложение текстур. Спасибо. [Delphi, Windows]
 
  • V@s_!s_D@s (02.05.10 11:10) [0]
    Господа, Надеюсь мне сюда.
    Имею большую проблему с командой GlBindTexture, которая по идее должна менять текущую активную текстуру, из списка текстур, как я понимаю, находящихся в видеопамяти( а может и не там?) на другую.
    НО ОНА СИЛЬНО ТОРМОЗИТ!. Фактически она немного выигрывает по скорости метод дисплейных списков (типа glnewlist ......glendlist), т.е. постоянную генерацию текстур.
    Как можно ускорить это?
    То есть как вообще можно накладывать изображение на обьекты, если их до... очень много и все с разнными текстурами?

    пока что придумал способ создания одной текстуры, только очень длинной и накладывать её участками имитируя разнообразие текстур.
    НО! пользоватся этим довольно ограничено, А ПОТОМУ МНЕ ПРОСТО НЕОБХОДИМ НОВЫЙ И БЫСТРЫЙ СПОСОБ.
  • immortal1977 (02.05.10 22:39) [1]
    Когда-то давно занимался OpenGl'ем, в качестве простейшего примера была сваяна прога: при запуске нужно выбрать какой-нибудь avi-файл, потом рисуется куб, на одной из граней которого выводится в качестве текстуры этот фильм в реалтайм. Куб можно вращать мышкой. Если я правильно понял вашу задачу, что вам необходимо динамически менять определенную текстуру, то могу выслать исходники, может это поможет...
    p/s GL'ем давно не занимаюсь, более конкретно сейчас подсказать не могу.
  • V@s_!s_D@s © (03.05.10 01:52) [2]
    immortal1977, Не знаю насколько уже я вас правильно понял, но судя по названию, динамические текстуры меняют свои свойства многократно во время работы программы.
    Буду очень рад получить ваши исходники.
    Если сможете отправить по почте то это она Sum.Vasiliy@yandex.ru
    но вообще у меня другая задача:
    имеется матрица, формирующая поверхность поля - моря. Идёт шторм (сделано), плывёт корабль (у меня в упрощённой версии чемто похоже на корабль), расчитываем нагрузку на детали в кн, кн/м и.т.д. (это пока в разработке). пользователь сам придумывает и собирает корабль (учитывая, что текстуры каждый придумывает свои, а кораблей там несколько, тоже в разработке, но уже в глубокой).
    Но ваша идея мне тоже нравится. Очень может пригодится. Может это меня и спасёт.
  • @!!ex © (03.05.10 07:59) [3]
    > [0] V@s_!s_D@s   (02.05.10 11:10)
    > НО ОНА СИЛЬНО ТОРМОЗИТ!.

    Она вполне адекватно работает.
    Что значит "сильно тормозит" мне не понятно.
    В проекте сотни биндов, ничего не тормозит.
  • V@s_!s_D@s © (03.05.10 10:19) [4]
    @!!ex
    > Она вполне адекватно работает.
    > Что значит "сильно тормозит" мне не понятно.
    > В проекте сотни биндов, ничего не тормозит.


    Дело в том, что программа начинает притормаживать СЛЕГКА. Тут мне придется признать лёгкую утрированность фразы. НО!!!!!!!.
    У меня в проекте не сотни текстурированых полигонов а десятки тысяч.
    и на каждом я хочу вызвать "бинд". Сейчас я вызываю несколько раз за один кадр смену текстур - тормозов нет, но при повторении этого несколько тысяч раз кадр притормаживает(Заметно подёргивание).
    вот пример чего примерно я хочу:

    Типа повторяем кучу раз, пока всё не отрисуем:
         GlBindTexture(GL_TEXTURE_2D,mastex[x]);
    то есть вызываем текстуру перед работой.
         glBegin(GL_POLУGON);
    здесь, вчастности пример рисования поверхности поля - моря с разными текстурами.
           glNormal3f(nx, ny, nz);
           glTexCoord2d (1.0, 0.0);
           glVertex3f(a-px, -2+py, b-pz);
           glTexCoord2d (1.0, 1.0);
           glVertex3f(a-px, -2+py, b-1-pz);
           glTexCoord2d (0.0, 1.0);
           glVertex3f(a-1-px, -2+py, b-1-pz);
           glTexCoord2d (0.0, 0.0);
           glVertex3f(a-1-px, -2+py, b-pz);
         glEnd;
    Заканчиваем повторять.
    Такую - же схему использовал и при написании трёхмерной аркады, но там то и вылезла трудность с рисованием поля разной текстурированости квадратиков. Ну там типа трава, камень и. т. д.
    Речку разлил - течёт, как ей и полагается строго вниз и туда где не занято.
    соответственно перед вызовом каждого участка нужно прверить, есть ли на нём вода или другой какой обьект, содержащий иную какую текстуру и переключится на неё, а потом обратно. сейчас же сперва проиходится рисовать землю, потом воду, потом, где надо языки пламени, постоянно пересчитывать и как результат - перегружать центральный процессор, а ведь ему ещё считать физику и интеллект. Если текстуры забивабтся в память видео платы, то мультипроцессор должен тратить минимум времени на смену активной текстуры - то есть вообще не тратить, а он тратит.

       
    То есть перед каждым рисованием POLYGON или QUADS мне нужно вызвать текстуру. В принципе можно обойтись и без этого но мне нужно, чтобы пользователь мог собрать корабль или чё ему ещё там угодно , и соответственно вызвать свой, мной незапланироваый порядок рисования полигонов
  • V@s_!s_D@s © (03.05.10 10:21) [5]
    А ведь там ещё плавают корабли и их тоже приходится рисовать по придуманым пользователями чертежам!!!!
  • @!!ex © (03.05.10 11:12) [6]
    Десятки тысяч биндов в кадре???
    Явно капец в арзитектуре.
    Думай как этого избежать.
    Даже Крайзис не делает такого количества биндов. :)
  • V@s_!s_D@s © (03.05.10 14:29) [7]

    > @!!ex ©   (03.05.10 11:12) [6]
    > Десятки тысяч биндов в кадре???
    > Явно капец в арзитектуре.
    > Думай как этого избежать.
    > Даже Крайзис не делает такого количества биндов. :)


    1. Интересно, как многообразие картинок обеспечивается в крайзисе? А в джаст кост? ну допустим, карты там статичные, типы обьектов, даже не говоря о текстурах однообразные - благо много. На всё рисование такой карты вызову 20 - 30 glbindtexture. А ВСЕ ТАКИ??
    2. Всё - же если без юмора, то КАК ВООБЩЕ ВОЗМОЖНО ОБЕСПЕЧИТЬ МНОГООБРАЗИЕ КАРТИНОК В ОДНОМ КАДРЕ?
    Ведь текстуры явно можно (а как я понимаю так и происходит) засунуть в видеопамять. И соответственно они все должы быть под рукой постоянно. Допустим с разными хитростями я уже сократил количество биндов до одного при рисовании основания, но ведь както нужно рисовать обьекты, а они все должнны задаватся пользователем. Т.е смена картинок должна быть частой. Да и хитрости эти сильно увеличивают ёмкость текстуры за счёт удлинения оной.
    3. Т.Е. допустим текстура и картинка вещи разные и мы можем как это везде принято рисовать на весь обьект, т. есть на все полигоны обьекта одну текстуру, но всё-таки какие ещё есть варианты наложения КАРТИНОК. Я тут посмотрел на вариант многоуровневых текстур и шейдеров, Это как представить? То есть зачем они? В смысле что они изх себя представляют - прочитал уже где то 3 учебника но там не написано.
  • @!!ex © (03.05.10 19:15) [8]
    Фиговые учебники.
  • V@s_!s_D@s © (08.05.10 17:11) [9]
    Буду благодарен за любую ссылку на хороший учебник. Желательно на обьектпаскале.
 
Конференция "Игры" » Необходимо оптимизировать наложение текстур. Спасибо. [Delphi, Windows]
Есть новые Нет новых   [118650   +4][b:0][p:0.001]