ФлеймФорумПрограммирование

Глюки при проективном текстурировании.

#0
10:17, 7 авг 2012

Я пытаюсь сделать тени с помощью Shadow map, заметил некоторые странности при наложении карты глубин. Она сильно искажается в зависимости от положения камеры, правильно она накладывается только если камера в позиции источника света, вот скриншот(плоскость должна быть полностью белая):
SMPT | Глюки при проективном текстурировании.
Данные из текстуры читаю так:

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 - проективные текстурные координаты вычисляющиеся с позиции источника света.

В чём может быть проблема?

#1
16:01, 7 авг 2012

kroonk
Проблемы с матрицами

#2
17:06, 7 авг 2012

-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));
#3
17:56, 7 авг 2012

kroonk
> PSI.TexCoord
Что это такое?

#4
20:05, 7 авг 2012

-Eugene-
> Что это такое?
Экранные координаты для проективного текстурирования, вычисляются так:

float4 TexCoord = mul(float4(Pos, 1.0f), World);
TexCoord = mul(TexCoord, LightViewProj);
#5
20:30, 7 авг 2012

kroonk
> &(matView*matProj)
Вот так вообще нельзя делать, хотя наверно дело не в этом...

#6
21:12, 7 авг 2012

-Eugene-
> Вот так вообще нельзя делать
Почему? Вроде всегда нормально работало.
-Eugene-
>хотя наверно дело не в этом
А в чём?

#7
10:32, 8 авг 2012

kroonk
> Почему? Вроде всегда нормально работало.
Ты знаешь, на что ты передаешь указатель? Я - нет. Нехорошо передавать указатель на неизвестную область памяти.

> А в чём?
Установи zfar для камеры тени так, чтобы вся сцена НЕ влезала в проекцию, и нарисуй содержимое карты теней

ФлеймФорумПрограммирование

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