Почему мой шейдер Фонга OpenGL ведет себя как плоский шейдер?

Я изучал OpenGL последние пару недель, и у меня возникли некоторые проблемы с реализацией шейдера Фонга. Похоже, что он не выполняет интерполяцию между вершинами, несмотря на то, что я использовал квалификатор smooth . Я что-то упустил? Чтобы отдать должное, где причитается, код для вершинных и фрагментных шейдеров сильно заимствован из OpenGL SuperBible Fifth Edition. Я очень рекомендую эту книгу!

Vertex Shader:

#version 330
in vec4 vVertex;
in vec3 vNormal;
uniform mat4 mvpMatrix;  // mvp = ModelViewProjection
uniform mat4 mvMatrix; // mv = ModelView
uniform mat3 normalMatrix;
uniform vec3 vLightPosition;
smooth out vec3 vVaryingNormal;
smooth out vec3 vVaryingLightDir;

void main(void) {
 vVaryingNormal = normalMatrix * vNormal;
 vec4 vPosition4 = mvMatrix * vVertex;
 vec3 vPosition3 = vPosition4.xyz / vPosition4.w;
 vVaryingLightDir = normalize(vLightPosition - vPosition3);
 gl_Position = mvpMatrix * vVertex;
}

Fragment Shader:

#version 330
out vec4 vFragColor;
uniform vec4 ambientColor;
uniform vec4 diffuseColor;
uniform vec4 specularColor;
smooth in vec3 vVaryingNormal;
smooth in vec3 vVaryingLightDir;

void main(void) {
 float diff = max(0.0, dot(normalize(vVaryingNormal), normalize(vVaryingLightDir)));
 vFragColor = diff * diffuseColor;
 vFragColor += ambientColor;
 vec3 vReflection = normalize(reflect(-normalize(vVaryingLightDir),normalize(vVaryingNormal)));
 float spec = max(0.0, dot(normalize(vVaryingNormal), vReflection));

 if(diff != 0) {
   float fSpec = pow(spec, 32.0);
   vFragColor.rgb += vec3(fSpec, fSpec, fSpec);
 }

}

Это (общественное достояние) изображение из Википедии показывает, какой именно тип изображения я получаю и к чему я стремлюсь - я Я получаю "плоское" изображение, но мне нужно изображение "Фонг".

Любая помощь будет принята с благодарностью. Спасибо!

edit: Если это имеет значение, я использую PyOpenGL 3.0.1 и Python 2.6.

edit2:

Решение

Оказывается, проблема была в моей геометрии; Кос был прав. Для всех, кто сталкивается с этой проблемой с моделями Blender, Кос указал, что выполнение Edit-> Faces-> Set Smooth помогает. Я обнаружил, что Wings 3D работает "из коробки".

48
задан Jonba 24 March 2017 в 16:07
поделиться