• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

C# Directx !

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

Blader

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


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

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

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

Blader

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

Blader

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

62316e

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

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

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

Blader

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

62316e

Но как склеить эти 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]);
}
}

}

итд итд итд.
 
B

Blader

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!