У меня есть 2D-карта высот, и я хочу сгенерировать карту нормалей из нее.
Я использовал Vec3 normal = Vec3(2*(R-L), 2*(B-T), -4).Normalize();
, и я попытался использовать перекрестное произведение соседних пикселей, но я все еще не получаю гладкий результат.
Освещение рассчитывается по модели blinn-phong:
vec3 norm = texture(NORMAL_TEXTURE, UV).xyz;
norm = norm * 2.0 -1.0;
vec3 diff = max(dot(norm, normalize(lightDir)) ,0.0) * lightColor * lightPower / (length(lightDir) * length(lightDir));
vec3 ambient = 0.2 * vec3(1,1,1);
vec3 h = normalize(lightDir + viewDir);
float NdotH = dot(norm, h);
float intensity = clamp(pow(NdotH, 200), 0, 1.0);
vec3 specular = lightColor * intensity * lightPower / (length(lightDir) * length(lightDir));
Это результат, когда я использую зеркальную подсветку.