Я пытаюсь сделать тени с помощью Shadow map, заметил некоторые странности при наложении карты глубин. Она сильно искажается в зависимости от положения камеры, правильно она накладывается только если камера в позиции источника света, вот скриншот(плоскость должна быть полностью белая):
Данные из текстуры читаю так:
float2 uv = PSI.TexCoord.xy / PSI.TexCoord.w * 0.5 + 0.5; uv.y = 1.0 - uv.y; float D1 = tex2D(DepthSampler, uv).r; DepthSampler - сэмплер карты глубин. PSI - структура поступающая в пиксельный шейдер из вершинного. PSI.TexCoord - проективные текстурные координаты вычисляющиеся с позиции источника света.
В чём может быть проблема?
kroonk
Проблемы с матрицами
-Eugene-
> Проблемы с матрицами
Ну это-то я понял, я не понимаю где именно проблемы. Матрицы инициализирую так:
D3DXMATRIX matView; position = D3DXVECTOR3(50, 50, 50); target = D3DXVECTOR3(0,0,0); up = D3DXVECTOR3(0, 1, 0); D3DXMatrixLookAtLH(&matView, &position, &target, &up); Device->SetTransform(D3DTS_VIEW, &V); D3DXMATRIXA16 matProjection; D3DXMatrixPerspectiveFovLH(&matProjection, 45.0f, (float)1024/(float)1024, 0.1f, 1000.0f ); Device->SetTransform( D3DTS_PROJECTION, &matProjection );
Передаю так:
Effect->SetMatrix("LightViewProj", &(matView*matProj));
kroonk
> PSI.TexCoord
Что это такое?
-Eugene-
> Что это такое?
Экранные координаты для проективного текстурирования, вычисляются так:
float4 TexCoord = mul(float4(Pos, 1.0f), World); TexCoord = mul(TexCoord, LightViewProj);
kroonk
> &(matView*matProj)
Вот так вообще нельзя делать, хотя наверно дело не в этом...
-Eugene-
> Вот так вообще нельзя делать
Почему? Вроде всегда нормально работало.
-Eugene-
>хотя наверно дело не в этом
А в чём?
kroonk
> Почему? Вроде всегда нормально работало.
Ты знаешь, на что ты передаешь указатель? Я - нет. Нехорошо передавать указатель на неизвестную область памяти.
> А в чём?
Установи zfar для камеры тени так, чтобы вся сцена НЕ влезала в проекцию, и нарисуй содержимое карты теней
Тема в архиве.