Как заставить нормальную карту работать, используя Direct X, в пиксельном шейдере - PullRequest
0 голосов
/ 24 января 2020

У меня есть тангенс и битангенты и т. Д. c, я думаю, что у меня есть правильная математика вплоть до финального материала в пиксельном шейдере.

Я смотрел учебные пособия, но, похоже, не могу заставить его работать в моей собственной программе.

Мой код карты нормалей до сих пор выглядит следующим образом:

   float3 normalMap = (nTex.Sample(mySampler, input.UV).rgb);


normalMap = (normalMap * 2) - 1.0f;

input.tangents = normalize(input.tangents - dot(input.tangents, input.normal) * input.normal);

float3 biTang = cross(input.normal, input.tangents);

float3x3 texSpace = float3x3(input.tangents, biTang, input.normal);

//float3 normalWW = float3(normalMap.r, normalMap.g, normalMap.b);

input.normal = normalize(mul(normalMap, texSpace));

float3 plDir = float3(pointLightDir.rgb);

//float final = saturate(dot(-plDir, input.normal));


//float4 finalW = saturate(float4(combined * final));

output.Color = color * combined;

output.Color+= saturate((dot(-plDir, input.normal)*combined)*color);


output.Color.a = 1;

Я еще не назвал вещи в хорошем смысле. «комбинированный» - это моя затенение по фонгу, у меня есть диффузный, зеркальный и эмбиентный сложения. "color" - это просто выборочная диффузная текстура.

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

Я в DirectX в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...