ПрограммированиеФорумГрафика

[Решено] Перенос данных из одного буфера вершин в другой.

Страницы: 1 2 3 Следующая »
#0
20:07, 22 авг 2015

Работаю над созданием мода для игры WarCraft 3: добавляю поддержку Direct3D9 и возможность использовать соответствующие шейдеры/эффекты.

Вот в чём проблема:
Попробовал использовать эффект ParallaxOcclusionMapping.fx из DirectX SDK за 2010 год: текстуры накладываются правильно, bump эффект работает, но specular статичен - не меняется, если передвигать камеру, реагирует только на вращение и перемещение самого объекта.

+ Показать

Проблема возникла из-за того, что в варкрафте изначально не рассчитываются тангенты.
Теперь я пытаюсь перенести данные из оригинального буфера вершин в новый, где рассчитываю тангенты, и подменять его на этапе визуализации. Рисовать объекты из инициализированной переменной получается, но читать данные вершин из оригинального буфера - нет. В чём проблема?

Код здесь.

#1
20:10, 22 авг 2015

В коде шейдера, отредактированного мной, оригинальный код закоментирован.

Переменной vInViewWS не было, внимание на неё не обращайте, я её сам добавил: сначала пробовал сделать по-другому.
В данном эффекте матрица вида вообще не использовалась.

#2
10:21, 24 авг 2015

А как Вы добавили поддержку самого D3D9 в WarCraft 3?

#3
10:26, 24 авг 2015

[RenderEdge] Первое Demo (http://xgm.guru/p/wc3/155094)
[RenderEdge] Старые размышления (http://xgm.guru/p/wc3/149614)
[Warcraft 3] Перенос рендера: D3D8 -> D3D9 -> D3D11 (http://warcraft3ft.info/forum/29-57424)

#4
10:33, 24 авг 2015

Есть исходники шейдеров варкрафта на DX8? То есть оригинальные шейдеры. Надо посмотреть, как он рендерит источники света.

#5
10:35, 24 авг 2015

К сожалению, нет.
Если у Вас есть WarCraft, может посмотрите на Parallax Mapping в живую?

#6
10:37, 24 авг 2015

И да, если код оригинального шейдера верен, то почему он не работает?
Похоже, проблема в самой программе. Но все входные данные корректны.

#7
10:40, 24 авг 2015

В программе я отлавливаю функцию DrawIndexedPrimitive и пишу в ней приведённый выше код.

#8
11:00, 24 авг 2015

g_LightDir - только один источник света? И то в виде направления. Вот вам и статичные спекуляры. На сколько мне известно, в варкрафте источники света еще и точечные есть - свет от факелов, к примеру. А где вы его в шейдер передаете? А нигде.

#9
11:12, 24 авг 2015

Пока больше одного источника не надо. И что ещё надо передавать кроме направления?

#10
11:26, 24 авг 2015

Ничего больше не надо передавать. Просто это спекуляр от солнца, как я понял? А по вашему описанию я не понял, в чем проблема. Он же и должен реагировать только на перемещение и поворот.

#11
11:30, 24 авг 2015

Он должен реагировать на перемещение и поворот камеры, а не только самого объекта.

#12
12:13, 24 авг 2015

В варкрафте позиция солнца относительно камеры всегда на одном и том же месте.

#13
12:29, 24 авг 2015

Я создаю источник света из программы, а не беру его из варкрафта.
Дело в том, что с шейдером, до того, как я его отредактировал, specular покрывал объект практически равномерно, как обычная статичная текстура. После редактирования всё стало работать нормально, но остались проблемы с параллаксом.

#14
17:44, 17 сен 2015

Понятно, всё дело в том, что у меня не рассчитываются Tangent и Binormal. Нормали рассчитываются WarCraft'ом, дальше нашёл пример расчёта Tangent и Binormal, но для этого нужны переменные vertexCount, Vertex, numFaces и Triangle. Можно ли всё это сделать, если есть доступ к буферу вершин и индексов, к переменным baseVertexIndex, minIndex, startIndex, numVertices и primCount? Или я не так понял способ расчёта Tangent и Binormal. Может есть другой способ?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.