Обводка выбранного объекта
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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user