C# Directx !

Тема в разделе ".NET", создана пользователем Blader, 11 апр 2008.

  1. Blader

    Blader Гость

    Всем привет.
    Я пишу программу на VS 2005, managed dx9 с использованием мешей и шейдеров.
    [​IMG]
    [​IMG]
    У меня возникло несколько вопросов к знающим:
    1) Как надо располагать меш-объекты? В случае, если ставить мир в точку Х, а затем отрисовывать объект, сбивается всё освещение, что хорошо видно на скрине. Т.к. мировое освещение каждый раз "переезжает" вместе с положением объекта и мира.
    2) Мешей будет около 3к.. возможно ли и нужно ли из них создавать 1 большой объект? (слить все меши в 1)
    3) Подскажите, как можно оптимизировать отрисовку при таком количестве объектов..?

    Заранее всем спасибо, жду советов.
    В гугл попрошу не отправлять. На эту тему просидел там около суток ;)
    Мб я не то искал?

    Вопрос дня:
    "Как правильно отрисовывать несколько меш-объектов на одной сцене?"
     
  2. Blader

    Blader Гость

    Отлично, прошло 3 дня.
    На этом форуме вообще кто-нибудь есть?
     
  3. Blader

    Blader Гость

    Но всё же я думал тут обитают крутые кодеры, знающие элементарную графику..
     
  4. 62316e

    62316e Гость

    1. Юзай Scene Graph (Граф сцены) например.
    2. Если мешы статические (например ландшафт) то лучше один меш, но нужна оптимизация типа LOD, если динамические тогда в один меш лучше не клеить.
    3. Юзать Culling и Hidden surface determination
    4. см 1.

    Думаю для тебя сначала было бы правильней понять что такое матрицы в 3d графике и конкретно в MDX а потом уже думать об оптимизации.
     
  5. Blader

    Blader Гость

    Спасибо за первый ответ ^_^.
    Меши у меня Mesh.Sphere статические, ну если имеется в виду, что в процессе отрисовки сцены с объектами в отдельности не происходит никаких преобразований(только преобразования для поворота мышой всей сцены и т. д.). Сейчас добился более менее рабочего результата.. Но 16 треугольников на сферу - это не графика. Точнее всё бы ничего, но при приближении хотелось бы качества получше, OptimizeMesh не предлагать, ибо скорее всего собьет скорость до нуля, оптимизировать каждый раз 3к объектов имхо не мало.
    С матрицами знаком, про Hidden surface почитал, суть я понимаю, я пытался руками написать нечто подобное, "бить сцену" на несколько частей, но я так понял, что за это в mdx отвечает zbuffer и т.п.
    Но как склеить эти 3к в один меш? Как это можно реализовать вообще, нигде не нашел. Думаю сие действие решит сразу десяток проблем - от освещения до шейдеринга + еще и сцену не нужно будет сдвигать к центру. Буду очень признателен, если скажешь как слить меши.)
    Граф сцены, полагаю, тут не будет иметь большого значения. У меня только сферы и только цилиндры (белок).
     
  6. 62316e

    62316e Гость

    Берёшь делаешь новый мешь, проходишь по всем вершинам других мешей и копируешь их в первый мешь.

    Проблем никаких это не решит. Какую сцену и куда сдвигать? Даже если у тебя Шарики + Цилиндры + это два разных шейдера, те как ты хочешь пройти один меш 2 разными шейдерами параллельно?

    Пример:
    у тебя есть 3 шарика 1 цилиндр + камера = 5 обектов. 1 шейдер для шариков и 1 шейдер для цилиндров.
    для простоты возьмем 2D:
    шарик1.Pos = 0, 1
    шарик2.Pos = 1, 1
    шарик3.Pos = 1, 0
    цилиндр1.Pos = 2, 0
    камера.Pos = 10, 10; камера.Target = 0, 0

    каждый кадр{
    сортироватьПоМатериалу();

    готовим шейдер{
    цыклом рендерим обекты{
    D3D.WorldMatrix = сортированныеОбекты[n].Pos;
    D3D.Render(sortedObjectList[n]);
    }
    }

    }

    итд итд итд.
     
  7. Blader

    Blader Гость

    А можно поинтерисоваться зачем сортировка?
     
Загрузка...
Похожие Темы - Directx
  1. mibin
    Ответов:
    2
    Просмотров:
    2.345
  2. mibin
    Ответов:
    1
    Просмотров:
    2.931
  3. mibin
    Ответов:
    1
    Просмотров:
    2.217

Поделиться этой страницей