Обводка выбранного объекта
This commit is contained in:
		
							parent
							
								
									4ff13f4448
								
							
						
					
					
						commit
						c4df5be81d
					
				| @ -40,6 +40,9 @@ uniform sampler2D gAmbientSpecular; | ||||
| uniform sampler2DArray sunShadowDepth; | ||||
| uniform samplerCubeArray pointShadowDepth; | ||||
| uniform sampler2D ssao; | ||||
| uniform usampler2D gID; | ||||
| 
 | ||||
| uniform uvec3 selectedID; | ||||
| 
 | ||||
| layout(std140, binding = 4) uniform gamma | ||||
| { | ||||
| @ -198,4 +201,21 @@ void main() | ||||
| 
 | ||||
|     // Применение гамма-коррекции | ||||
|     color.rgb = pow(color.rgb, vec3(inv_gamma)); | ||||
| 
 | ||||
| 
 | ||||
|     // Обводка выбранного объекта | ||||
|     if (length(selectedID.rg) > 0 && selectedID.rg == texture(gID, texCoord).rg) | ||||
|     { | ||||
|         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); | ||||
|             } | ||||
|     } | ||||
| }  | ||||
| @ -163,7 +163,7 @@ int main(void) | ||||
|     lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag"); | ||||
|     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*)); | ||||
|     // Загрузка данных о границах каскадов
 | ||||
|     glUniform1fv(lightShader.getUniformLoc("camera_cascade_distances"), CAMERA_CASCADE_COUNT, &camera_cascade_distances[1]); | ||||
| @ -481,6 +481,9 @@ int main(void) | ||||
|         gNormal.use(); | ||||
|         gDiffuseP.use(); | ||||
|         gAmbientSpecular.use(); | ||||
|         gID.use(); | ||||
|         // Идентификатор выбранного объекта для обводки
 | ||||
|         glUniform3uiv(lightShader.getUniformLoc("selectedID"), 1, (GLuint*) &selected); | ||||
|         // Подключаем текстуры теней
 | ||||
|         sunShadowDepth.use(); | ||||
|         pointShadowDepth.use(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user