Странный глюк вершинного шейдера - PullRequest
1 голос
/ 28 февраля 2009

У меня небольшая проблема с эффектом воды

как вы можете видеть здесь , это не отображается правильным образом. другой экран с примененной другой текстурой показывает ошибку в преобразовании более четко мой код HLSL:

V2P vs(float4 inPos : POSITION, float2 inTex: TEXCOORD)
{    
    V2P Output = (V2P)0;

    float4x4 viewproj = mul (matView, matProjection);
    float4x4 worldviewproj = mul (matWorld,viewproj);

    float4x4 reflviewproj = mul (matRLView, matProjection);
    float4x4 reflworldviewproj = mul (matWorld, reflviewproj);

    Output.Position = mul(inPos, worldviewproj);
    Output.RLMapTex = mul(inPos, reflworldviewproj);

    return Output;
}
P2F ps(V2P PSIn)
{
    P2F Output = (P2F)0;        

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w /2.0f + 0.5f;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;    

    float2 ProjectedRefCoords;
    ProjectedRefCoords.x = ( PSIn.Position.x / PSIn.Position.w) /2.0f + 0.5f;
    ProjectedRefCoords.y = (-PSIn.Position.y / PSIn.Position.w) /2.0f + 0.5f; 

    Output.Color = tex2D(samRLMap, ProjectedTexCoords);    

    return Output;
}

карта отражения визуализируется на цели рендеринга при переворачивании значения y глаза вдоль высоты воды. (и с восходящим вектором 0, -1,0)

Итак, мой вопрос: что может быть причиной этого?

Ответы [ 3 ]

1 голос
/ 01 марта 2009

Полагаю, я обнаружил, что матрица, которую я использовал для отраженного вида, неверна. Когда я использую стандартный вид, он отлично работает

0 голосов
/ 28 февраля 2009

Похоже на текстуру, которая повторяет свои краевые пиксели. Другими словами, вы можете выполнять поиск текстуры за пределами текстурных границ. Вы уверены, что ваша карта отражения достаточно велика?

Может быть, попробовать установить выходной цвет на красный, если координаты текстуры находятся вне диапазона? (Я не говорю по HLSL, поэтому не знаю синтаксис для этого, но я уверен, что это возможно.)

Или увеличить карту отражения?

Проблемы такого рода могут быть сложными для отладки, даже если вы видите полный исходный код, так что это скорее подсказка, где искать, а не фактический ответ. Моя попытка психической отладки.

0 голосов
/ 28 февраля 2009

Мне не ясно, почему вы меняете х. Разве это не остается тем же самым, поскольку y перевернут? Как в

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...