Запись ID объекта в текстуру
This commit is contained in:
		
							parent
							
								
									1ff8580461
								
							
						
					
					
						commit
						d7e81fa2cd
					
				| @ -12,6 +12,7 @@ layout (location = 0) out vec3 gPosition; | |||||||
| layout (location = 1) out vec3 gNormal; | layout (location = 1) out vec3 gNormal; | ||||||
| layout (location = 2) out vec4 gDiffuseP; | layout (location = 2) out vec4 gDiffuseP; | ||||||
| layout (location = 3) out vec4 gAmbientSpecular; | layout (location = 3) out vec4 gAmbientSpecular; | ||||||
|  | layout (location = 4) out uvec3 gID; | ||||||
| 
 | 
 | ||||||
| in vec3 vertex; // Позиция вершины в пространстве | in vec3 vertex; // Позиция вершины в пространстве | ||||||
| in vec3 N; // Нормаль трансформированноая | in vec3 N; // Нормаль трансформированноая | ||||||
| @ -31,6 +32,8 @@ uniform bool parallaxmapped; | |||||||
| 
 | 
 | ||||||
| uniform float parallax_heightScale = 0.1; | uniform float parallax_heightScale = 0.1; | ||||||
| 
 | 
 | ||||||
|  | uniform uvec3 ID = uvec3(0); | ||||||
|  | 
 | ||||||
| void main() | void main() | ||||||
| {     | {     | ||||||
|     // Сформируем TBN матрицу |     // Сформируем TBN матрицу | ||||||
| @ -103,4 +106,6 @@ void main() | |||||||
|     gAmbientSpecular.rgb = texture(tex_ambient, new_texCoord).rgb * ka; |     gAmbientSpecular.rgb = texture(tex_ambient, new_texCoord).rgb * ka; | ||||||
|     // Сохранение зеркальной составляющей |     // Сохранение зеркальной составляющей | ||||||
|     gAmbientSpecular.a = texture(tex_specular, new_texCoord).r * ks.r; |     gAmbientSpecular.a = texture(tex_specular, new_texCoord).r * ks.r; | ||||||
|  |     // Сохранение идентификатора объекта | ||||||
|  |     gID = ID; | ||||||
| } | } | ||||||
| @ -144,13 +144,14 @@ int main(void) | |||||||
|     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap  
 |     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Использование уменьшенных версий mipmap  
 | ||||||
| 
 | 
 | ||||||
|     // Создадим G-буфер с данными о используемых привязках
 |     // Создадим G-буфер с данными о используемых привязках
 | ||||||
|     GLuint attachments[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 }; |     GLuint attachments[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3, GL_COLOR_ATTACHMENT4 }; | ||||||
|     FBO gbuffer(attachments, sizeof(attachments) / sizeof(GLuint)); |     FBO gbuffer(attachments, sizeof(attachments) / sizeof(GLuint)); | ||||||
|     // Создадим текстуры для буфера кадра
 |     // Создадим текстуры для буфера кадра
 | ||||||
|     Texture gPosition(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 0, GL_RGB16F, GL_RGB); // Позиция вершины
 |     Texture gPosition(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 0, GL_RGB16F, GL_RGB); // Позиция вершины
 | ||||||
|     Texture gNormal(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT1, 1, GL_RGB16F, GL_RGB); // Нормали
 |     Texture gNormal(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT1, 1, GL_RGB16F, GL_RGB); // Нормали
 | ||||||
|     Texture gDiffuseP(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT2, 2, GL_RGBA16F); // Диффузная составляющая и коэф. глянцевости
 |     Texture gDiffuseP(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT2, 2, GL_RGBA16F); // Диффузная составляющая и коэф. глянцевости
 | ||||||
|     Texture gAmbientSpecular(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT3, 3); // Фоновая составляющая и один канал зеркальной
 |     Texture gAmbientSpecular(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT3, 3); // Фоновая составляющая и один канал зеркальной
 | ||||||
|  |     Texture gID(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT4, 7, GL_RGB32UI, GL_RGB_INTEGER, GL_UNSIGNED_INT); // Идентификатор объекта
 | ||||||
|     // Создадим буфер рендера под буфер глубины и привяжем его
 |     // Создадим буфер рендера под буфер глубины и привяжем его
 | ||||||
|     RBO grbo(WINDOW_WIDTH, WINDOW_HEIGHT); |     RBO grbo(WINDOW_WIDTH, WINDOW_HEIGHT); | ||||||
|     gbuffer.assignRenderBuffer(grbo.getHandler()); |     gbuffer.assignRenderBuffer(grbo.getHandler()); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user