Обводка выбранного объекта
This commit is contained in:
parent
68a8f4d0d0
commit
329bea7124
|
@ -40,6 +40,9 @@ uniform sampler2D gAmbientSpecular;
|
||||||
uniform sampler2DArray sunShadowDepth;
|
uniform sampler2DArray sunShadowDepth;
|
||||||
uniform samplerCubeArray pointShadowDepth;
|
uniform samplerCubeArray pointShadowDepth;
|
||||||
uniform sampler2D ssao;
|
uniform sampler2D ssao;
|
||||||
|
uniform usampler2D gID;
|
||||||
|
|
||||||
|
uniform uvec3 selectedID;
|
||||||
|
|
||||||
layout(std140, binding = 4) uniform gamma
|
layout(std140, binding = 4) uniform gamma
|
||||||
{
|
{
|
||||||
|
@ -198,4 +201,21 @@ void main()
|
||||||
|
|
||||||
// Применение гамма-коррекции
|
// Применение гамма-коррекции
|
||||||
color.rgb = pow(color.rgb, vec3(inv_gamma));
|
color.rgb = pow(color.rgb, vec3(inv_gamma));
|
||||||
|
|
||||||
|
vec3 ID = texture(gID, texCoord).rgb;
|
||||||
|
// Обводка выбранного объекта
|
||||||
|
if (length(selectedID.rg) > 0 && selectedID.rg == ID.rg && ID.b == 0)
|
||||||
|
{
|
||||||
|
int border_width = 3;
|
||||||
|
vec2 size = 1.0f / textureSize(gID, 0);
|
||||||
|
for (int i = -border_width; i <= +border_width; i++)
|
||||||
|
for (int j = -border_width; j <= +border_width; j++)
|
||||||
|
{
|
||||||
|
if (i == 0 && j == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (texture(gID, texCoord + vec2(i, j) * size).rg != selectedID.rg)
|
||||||
|
color.rgb = vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -209,7 +209,7 @@ int main(void)
|
||||||
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
||||||
lightShader.link();
|
lightShader.link();
|
||||||
// Привязка текстур
|
// Привязка текстур
|
||||||
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth", "pointShadowDepth", "ssao"};
|
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth", "pointShadowDepth", "ssao", "gID"};
|
||||||
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
||||||
// Загрузка данных о границах каскадов
|
// Загрузка данных о границах каскадов
|
||||||
glUniform1fv(lightShader.getUniformLoc("camera_cascade_distances"), CAMERA_CASCADE_COUNT, &camera_cascade_distances[1]);
|
glUniform1fv(lightShader.getUniformLoc("camera_cascade_distances"), CAMERA_CASCADE_COUNT, &camera_cascade_distances[1]);
|
||||||
|
@ -529,6 +529,9 @@ int main(void)
|
||||||
gNormal.use();
|
gNormal.use();
|
||||||
gDiffuseP.use();
|
gDiffuseP.use();
|
||||||
gAmbientSpecular.use();
|
gAmbientSpecular.use();
|
||||||
|
gID.use();
|
||||||
|
// Идентификатор выбранного объекта для обводки
|
||||||
|
glUniform3uiv(lightShader.getUniformLoc("selectedID"), 1, (GLuint*) &selected);
|
||||||
// Подключаем текстуры теней
|
// Подключаем текстуры теней
|
||||||
sunShadowDepth.use();
|
sunShadowDepth.use();
|
||||||
pointShadowDepth.use();
|
pointShadowDepth.use();
|
||||||
|
|
Loading…
Reference in New Issue