Как смешать диффузное значение (Kd) с текстурой (map_Kd) при загрузке файла волнового фронта? - PullRequest
0 голосов
/ 10 февраля 2020

Я просто пытаюсь написать загрузчик файлов wavefront на c ++. Я следовал учебному руководству на www.opengl-tutorial.org.. Там не сказано, как обращаться с mtl-файлами, поэтому я решил сделать это сам. Я знаю, что Kd отвечает за цвет диффузного свойства. С другой стороны, map_Kd отвечает за текстуру, которая описывает это свойство. В файле mtl всегда есть Kd, и это может быть map_Kd. Мой файл выглядит так:

.
.
.
newmtl Material.001
Ns 225.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd cubetex.bmp
.
.
.

Должен ли я умножить значения map_Kd на Kd? Или я должен использовать только map_Kd?

EDIT:

Вот мой фрагментный шейдер:

#version 430 core

in vec2 uv;
in vec3 Position_worldspace;
in vec3 Normal_cameraspace;
in vec3 EyeDirection_cameraspace;
in vec3 LightDirection_cameraspace;

out vec3 color;

uniform sampler2D tex;
uniform vec3 LightPosition_worldspace;

void main()
{

  vec3 LightColor = vec3(1,1,1);
  float LightPower = 50.0f;

  vec3 MaterialDiffuseColor = texture( tex, uv ).rgb;
    vec3 MaterialAmbientColor = vec3(0.1,0.1,0.1) * MaterialDiffuseColor;
    vec3 MaterialSpecularColor = vec3(0.3,0.3,0.3);

  float distance = length( LightPosition_worldspace - Position_worldspace );

  vec3 n = normalize( Normal_cameraspace );
  vec3 l = normalize( LightDirection_cameraspace );

  float cosTheta = clamp( dot( n,l ), 0,1 );

  vec3 E = normalize(EyeDirection_cameraspace);
    vec3 R = reflect(-l,n);

    float cosAlpha = clamp( dot( E,R ), 0,1 );

  color = MaterialAmbientColor + MaterialDiffuseColor * LightColor * LightPower * cosTheta / (distance*distance) + MaterialSpecularColor * LightColor * LightPower * pow(cosAlpha,5) / (distance*distance);

}

Я не знаю, как вычислить MaterialDiffuseColor

...