Open 1vanK opened 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);
}
gl_FragColor = vec4(Wb, 1.0); gl_FragColor = vec4(MaskIntensity, 1.0, 1.0, 1.0); дают нормальные изображения, то есть отзеркаливание по вертикали происходит в функции mix. Я слабо разбираюсь в шейдерах, не понимаю почему
К верху ногами тоже отлично :) надо наверно поправить еще текстурные координаты у 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 )
Помогло )
А в других шейдерах Urho3d разве тоже переворачивается вручную изображение?
Edit: кстати я наврал, gl_FragColor = vec4(Wb, 1.0); тоже перевернутый, это я просто камеру в игре перевернул )
Отлично ) У меня просто сборка на DX!! и я для OGL шейдеры не тестирую.
А в других шейдерах Urho3d разве тоже переворачивается вручную изображение?
Я не знаю может где есть специальный флаг в рендер командах который все это как-то решает. Хотя возможно это и баг рендера )
Я изменил код перемещения камеры на стандартный 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
Я думаю это связано с использованием физики. Там при обработке движения камеры ее координаты меняются между кадрами, а копирование положения камеры происходит только на каждом кадре, то есть в какие то моменты камеры имеют разные координаты. МОжет быть копирование камеры нужно делать в событии FixedUpdate ?
Если навесить на событие E_POSTUPDATE, то работает нормально SubscribeToEvent(E_POSTUPDATE, HANDLER(MyApp, HandleUpdate)); Видимо физика просчитывается к этому моменту только
О! Спасибо, я как-то и не подумал что можно повешать на E_POSTUPDATE, хотя я и предполагал что проблема в физике.
Пример не может найти материал :) Я попробовал скопировать Materials\noTexture.xml но у меня просто черный экран. Толи материал другой нужно, толи я накосячил при переписывании hlsl в glsl