VC ++, OpenGL, SDL
Мне интересно, есть ли способ добиться более плавного затенения в одном квадрате геометрии. Прямо сейчас, затенение выглядит гладким с моим точечным светом, однако интенсивность возрастает вдоль диагонального подразделения лица [/]
. Освещение в основном не видно между вершинами.
Вот что происходит, когда свет движется слева направо
Когда я перемещаю свет по поверхности, он делает это последовательно. Становится ярче в каждой вершине и оттуда исчезает.
Я вынужден поднять подразделение, чтобы получить более гладкий, более радиальный оттенок? или есть способ обойти это?
Вот шейдеры, которые я использую:
верт
varying vec3 vertex_light_position;
varying vec3 vertex_normal;
void main()
{
vertex_normal = normalize(gl_NormalMatrix * gl_Normal);
vertex_light_position = normalize(gl_LightSource[0].position.xyz);
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
фраг
varying vec3 vertex_light_position;
varying vec3 vertex_normal;
void main()
{
float diffuse_value = max(dot(vertex_normal, vertex_light_position), 0.0);
gl_FragColor = gl_Color * diffuse_value;
}
Моя геометрия, если кому-то интересно:
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(pos_x, pos_y - size_y, depth);
glTexCoord2f(1.0f, 1.0f); glVertex3f(pos_x + size_x, pos_y - size_y, depth);
glTexCoord2f(1.0f, 0.0f); glVertex3f(pos_x + size_x, pos_y, depth);
glTexCoord2f(0.0f, 0.0f); glVertex3f(pos_x, pos_y, depth);
glEnd();