2015-06-22 5 views
0

Я использую Warcraft/Age of Empires «Fog of War», написав класс Filter и соответствующее определение материала JME с помощью вершинного и фрагментарного шейдеров.JMonkey Filter Shader - получить World Position of Fragment

Я смог очень легко понять это, теперь я могу теперь затенять весь экран.

Но я снова застрял в вычислении, где данный фрагмент находится в мире.

Итак, как это можно сделать?

Зачем мне это нужно, в основном у меня есть текстура (32x32), чтобы затемнить мир в определенных местах на основе альфа-канала текстуры.

0,0 по текстуре будет соответствовать 0,0,0 в мире. С учетом «карты мира или местности» размером 100 100.

+0

Фрагменты уже находятся в пространстве проекции, принимая в качестве позиции экрана ввода. Вы ищете World Space, который используется в процессе затенения с помощью Vertex Shader. Вам придется работать в обратном направлении через эти прогнозы, может быть намного проще работать с вашей оригинальной геометрией. Для получения дополнительной информации см .: http://wiki.jmonkeyengine.org/doku.php/jme3:advanced:jme3_shaders –

ответ

0

Это не дает ответа на вопрос о том, как получить мировое положение фрагмента в шейдер используется в фильтрах, но все равно:

Он объяснил мне, что было бы разумнее осуществить туман войны для всех шейдеров, используемых объектами в игре, потому что это проще и намного более легко расширяемым (можно переключать эффект FOW на отдельные объекты или материалы).

Ответ заключается в том, чтобы добавить новый varying vec2, называемый «worldPos», например, и установить его в worldPos = g_WorldMatrix * vec4(inPosition, 1.0); в вершинном шейдере.

Это все. Однако это не работает для фильтров.

 Смежные вопросы

  • Нет связанных вопросов^_^