Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Ковалев Роман Евгеньевич | b90a9fe6b3 | |
Ковалев Роман Евгеньевич | 31496bd0ea |
|
@ -18,16 +18,25 @@ layout(std140, binding = 4) uniform gamma
|
||||||
float inv_gamma;
|
float inv_gamma;
|
||||||
};
|
};
|
||||||
|
|
||||||
out vec4 color;
|
layout (location = 1) out vec3 gNormal;
|
||||||
|
layout (location = 3) out vec4 gAmbientSpecular;
|
||||||
|
layout (location = 4) out uvec3 gID;
|
||||||
|
|
||||||
uniform float angle;
|
uniform float angle;
|
||||||
uniform vec3 direction;
|
uniform vec3 direction;
|
||||||
|
|
||||||
|
uniform uvec3 ID = uvec3(0);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float cosA = dot(normalize(pos_local), normalize(direction));
|
float cosA = dot(normalize(pos_local), normalize(direction));
|
||||||
if (degrees(acos(cosA)) <= angle)
|
if (degrees(acos(cosA)) <= angle)
|
||||||
color = vec4(pow(ka, vec3(inv_gamma)), 1);
|
gAmbientSpecular.rgb = pow(ka, vec3(inv_gamma));
|
||||||
else
|
else
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
|
gNormal = vec3(0);
|
||||||
|
|
||||||
|
// Сохранение идентификатора объекта
|
||||||
|
gID = ID;
|
||||||
}
|
}
|
|
@ -205,6 +205,10 @@ void Light::render(ShaderProgram &shaderProgram, UBO &material_buffer)
|
||||||
// Цикл по источникам света
|
// Цикл по источникам света
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
|
// Идентификатор источника как узла сцены для всей модели лампочки
|
||||||
|
bulb.set_group_id((GLuint64) &lights[i]);
|
||||||
|
sphere.id.value = (GLuint64) &lights[i];
|
||||||
|
|
||||||
// Загрузим направление
|
// Загрузим направление
|
||||||
glUniform3fv(direction_uniform, 1, &data[i].direction_angle.x);
|
glUniform3fv(direction_uniform, 1, &data[i].direction_angle.x);
|
||||||
// Угол для лампочки = 180 (рисуем целую модель)
|
// Угол для лампочки = 180 (рисуем целую модель)
|
||||||
|
@ -372,4 +376,4 @@ void Light::recalcVP()
|
||||||
int Light::getCount()
|
int Light::getCount()
|
||||||
{
|
{
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
|
@ -469,6 +469,10 @@ int main(void)
|
||||||
scene.render(gShader, material_data);
|
scene.render(gShader, material_data);
|
||||||
rectangle.render(gShader, material_data);
|
rectangle.render(gShader, material_data);
|
||||||
|
|
||||||
|
// Отрисовка отладочных лампочек со специальным шейдером
|
||||||
|
bulbShader.use();
|
||||||
|
Light::render(bulbShader, material_data);
|
||||||
|
|
||||||
// Используем шейдер для инструментов
|
// Используем шейдер для инструментов
|
||||||
toolsShader.use();
|
toolsShader.use();
|
||||||
// Рендерим инструменты для выбранного объекта
|
// Рендерим инструменты для выбранного объекта
|
||||||
|
@ -578,10 +582,6 @@ int main(void)
|
||||||
// Возвращаем запись глубины
|
// Возвращаем запись глубины
|
||||||
glDepthMask(GL_TRUE);
|
glDepthMask(GL_TRUE);
|
||||||
|
|
||||||
// Отрисовка отладочных лампочек со специальным шейдером
|
|
||||||
bulbShader.use();
|
|
||||||
Light::render(bulbShader, material_data);
|
|
||||||
|
|
||||||
// Дополнительная обработка мыши
|
// Дополнительная обработка мыши
|
||||||
process_mouse_button(mouse.left);
|
process_mouse_button(mouse.left);
|
||||||
process_mouse_button(mouse.right);
|
process_mouse_button(mouse.right);
|
||||||
|
|
Loading…
Reference in New Issue