MonkeyFirst / Urho3DPostProcessFXPortal

Urho3DPostProcessFXPortal
2 stars 3 forks source link

Textures/NoTextureMat.xml #1

Open 1vanK opened 9 years ago

1vanK commented 9 years ago

Пример не может найти материал :) Я попробовал скопировать Materials\noTexture.xml но у меня просто черный экран. Толи материал другой нужно, толи я накосячил при переписывании hlsl в glsl

1vanK commented 9 years ago

Исправил шейдер, заработало, но у меня все кверху ногами xD

#include "Uniforms.glsl"
#include "Samplers.glsl"
#include "Transform.glsl"
#include "ScreenPos.glsl"
#include "Lighting.glsl"

varying vec2 vScreenPos;

void VS()
{
    mat4 modelMatrix = iModelMatrix;
    vec3 worldPos = GetWorldPos(modelMatrix);
    gl_Position = GetClipPos(worldPos);
    vScreenPos = GetScreenPosPreDiv(gl_Position);
}

void PS()
{
    // DiffMap - WorldA = tex unit 0
    // NormalMap - WorldP = tex unit 1
    // SpecMap - WorldB = tex unit 2

    vec3 MaskRgb = texture2D(sNormalMap, vScreenPos).rgb;
    float MaskIntensity = GetIntensity(MaskRgb);

    vec3 Wa = texture2D(sDiffMap, vScreenPos).rgb;
    vec3 Wb = texture2D(sSpecMap, vScreenPos).rgb;

    gl_FragColor = vec4(mix(Wa, Wb, MaskIntensity), 1.0);
}
1vanK commented 9 years ago

gl_FragColor = vec4(Wb, 1.0); gl_FragColor = vec4(MaskIntensity, 1.0, 1.0, 1.0); дают нормальные изображения, то есть отзеркаливание по вертикали происходит в функции mix. Я слабо разбираюсь в шейдерах, не понимаю почему

MonkeyFirst commented 9 years ago

К верху ногами тоже отлично :) надо наверно поправить еще текстурные координаты у GL и DX отсчет в разных углах, хотя может быть это еще связанно с особенностями рендеринга в FBO вверх тормашками.

uv coordinates start from the upper left corner (v-axis is facing down). st coordinates start from the lower left corner (t-axis is facing up).

s = u; t = 1-v;

попробуй так сделать перед выборкой vScreenPos = vec2 ( vScreenPos.x, 1 - vScreenPos.y )

1vanK commented 9 years ago

Помогло )

1vanK commented 9 years ago

А в других шейдерах Urho3d разве тоже переворачивается вручную изображение?

Edit: кстати я наврал, gl_FragColor = vec4(Wb, 1.0); тоже перевернутый, это я просто камеру в игре перевернул )

MonkeyFirst commented 9 years ago

Отлично ) У меня просто сборка на DX!! и я для OGL шейдеры не тестирую.

А в других шейдерах Urho3d разве тоже переворачивается вручную изображение?

Я не знаю может где есть специальный флаг в рендер командах который все это как-то решает. Хотя возможно это и баг рендера )

1vanK commented 9 years ago

Я изменил код перемещения камеры на стандартный if (input->GetKeyDown('W')) camera.node->Translate(Vector3::FORWARD * MOVE_SPEED * timeStep); if (input->GetKeyDown('S')) camera.node->Translate(Vector3::BACK * MOVE_SPEED * timeStep); if (input->GetKeyDown('A')) camera.node->Translate(Vector3::LEFT * MOVE_SPEED * timeStep); if (input->GetKeyDown('D')) camera.node->Translate(Vector3::RIGHT * MOVE_SPEED * timeStep);

и у меня пропали артефакты рядом с порталами xD

1vanK commented 9 years ago

Я думаю это связано с использованием физики. Там при обработке движения камеры ее координаты меняются между кадрами, а копирование положения камеры происходит только на каждом кадре, то есть в какие то моменты камеры имеют разные координаты. МОжет быть копирование камеры нужно делать в событии FixedUpdate ?

1vanK commented 9 years ago

Если навесить на событие E_POSTUPDATE, то работает нормально SubscribeToEvent(E_POSTUPDATE, HANDLER(MyApp, HandleUpdate)); Видимо физика просчитывается к этому моменту только

MonkeyFirst commented 9 years ago

О! Спасибо, я как-то и не подумал что можно повешать на E_POSTUPDATE, хотя я и предполагал что проблема в физике.