• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

C# Directx !

  • Автор темы Автор темы Blader
  • Дата начала Дата начала
B

Blader

Всем привет.
Я пишу программу на VS 2005, managed dx9 с использованием мешей и шейдеров.


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

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

Вопрос дня:
"Как правильно отрисовывать несколько меш-объектов на одной сцене?"
 
Отлично, прошло 3 дня.
На этом форуме вообще кто-нибудь есть?
 
Но всё же я думал тут обитают крутые кодеры, знающие элементарную графику..
 
У меня возникло несколько вопросов к знающим:
1) Как надо располагать меш-объекты? В случае, если ставить мир в точку Х, а затем отрисовывать объект, сбивается всё освещение, что хорошо видно на скрине. Т.к. мировое освещение каждый раз "переезжает" вместе с положением объекта и мира.
2) Мешей будет около 3к.. возможно ли и нужно ли из них создавать 1 большой объект? (слить все меши в 1)
3) Подскажите, как можно оптимизировать отрисовку при таком количестве объектов..?
4) "Как правильно отрисовывать несколько меш-объектов на одной сцене?"

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

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

Думаю сие действие решит сразу десяток проблем - от освещения до шейдеринга + еще и сцену не нужно будет сдвигать к центру.
Проблем никаких это не решит. Какую сцену и куда сдвигать? Даже если у тебя Шарики + Цилиндры + это два разных шейдера, те как ты хочешь пройти один меш 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]);
}
}

}

итд итд итд.
 
А можно поинтерисоваться зачем сортировка?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab