Просвятите насчет настроек визуализации в D3D

Тема в разделе "WASM.DirectX", создана пользователем _220, 15 янв 2007.

  1. _220

    _220 New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2006
    Сообщения:
    111
    Понадобилось мне сделать проект, еще не знаю какой :), но общие
    соображения делаю уже сейчас, ясно, что буду юзать д3д. На этапе
    планирования возник вопрос по поводу растеризации, у меня в проге
    будут разные объекты, которые должны рендериться с разными настройками,
    одни с освещением, другие с прозрачностью, третьи с отключенным з-буфером.
    Просвятите меня плз по поводу ресурсоемкости таких операций, в частности,
    установка буфера вершин для последующей отрисовки. В пред. проге я делал
    просто: у каждого объекта свой буфер, своя процедура рисования, которая
    включает/выключает все что надо, а по выходу делает все назад, но еще на стадии
    программирования интерфейса у меня пошли тормоза, тогда я создал класс TriangleList,
    создав всего 1 буфер для меню, я хранил в нем (объекте класса) односвязный список
    с инфой как и что рисовать, а сам отображаемый объект знал только указатель на свой
    TriangleList и номер элемента, который содержит инфу о вершинах в буфере. Также я после добавления/удаления объектов вызывал функцию, котрая оптимизировала последовательность узлов в списке для минимизации кол-ва изменений различных настроек. Тормоза после этого исчезли, но система у меня получилась довольно громоздкая, хотя работала без глюков. Далее знакомясь с DirectX, у меня еще несколько раз случались ситуации, когда ормозило, но работало, как правило, причиной этого являлся какой-нибудь пустой буфер,неправильно инициализированый или используемый не так. Вопрос - это я в первый раз просто лишнего кода наворотил, вместо того, чтобы проверить все еще раз, или в DX в самом деле настройки так тормозны.
     
  2. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Вставлю свои пять копеек. Чем меньше используется переключений буферов и чем больше при этом размеры самих буферов (до определенного объема конечно), тем лучше. Также дела обстоят и с различными установками текстур и прочее и прочее. Оптимально считается что одинаковые вещи нужно группировать, а не использовать принцип при котором каждый объект хранит в себе все настройки и перед отрисовкой их устанавливает.

    Правильный шаг.

    Если есть сомнения относительно того или иного применяемого алгоритма в своей программе, то можно использовать профайлеры для сбора статистики с последующей оптимизацией по ней. Взять к примеру PIX или NVPerf.
     
  3. DARK_FURY

    DARK_FURY New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    3
    возможно ты упустил из простых правил:
    1 нельзя использовать вывод текста типа DrawTex (40% жрет сразу)
    2 GetTransform и GetBackBuffer тормозят
    3 текстуры должны быть размером 128х128 256х256 1024х1024 и т.д.
    4 буфер один в него загружается текущая сцена
    5 не использовать рисование всей сцены а записывать в буфер тока видимую часть
    6 И НЕ В КОЕМ СЛУЧАЕ НЕ ВЫЗЫВАТЬ ФУНКЦИИ ТИПА BEGIN и END много раз за кадр
    они сразу убью всю мощь видухи
    настройки растеризатора можна впихнуть в особый StateRender блок
    потом просто указать что хочеш использовать его простым вызовом