Буфер рендера теней
This commit is contained in:
		
							parent
							
								
									78e7160a4c
								
							
						
					
					
						commit
						b76d2c0cf2
					
				
							
								
								
									
										33
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								src/main.cpp
									
									
									
									
									
								
							| @ -141,7 +141,7 @@ int main(void) | |||||||
|     lightShader.load(GL_VERTEX_SHADER, "shaders/quad.vert"); |     lightShader.load(GL_VERTEX_SHADER, "shaders/quad.vert"); | ||||||
|     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"}; |     const char* gtextures_shader_names[]  = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth"}; | ||||||
|     lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*)); |     lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*)); | ||||||
| 
 | 
 | ||||||
|     glm::vec3 quadVertices[] = { {-1.0f,  1.0f, 0.0f} |     glm::vec3 quadVertices[] = { {-1.0f,  1.0f, 0.0f} | ||||||
| @ -156,6 +156,24 @@ int main(void) | |||||||
|     quadModel.load_verteces(quadVertices, 4); |     quadModel.load_verteces(quadVertices, 4); | ||||||
|     quadModel.load_indices(quadIndices, 6); |     quadModel.load_indices(quadIndices, 6); | ||||||
| 
 | 
 | ||||||
|  |     // Размер текстуры тени от солнца
 | ||||||
|  |     const GLuint sunShadow_resolution = 1024; | ||||||
|  |     // Создадим буфер кадра для рендера теней
 | ||||||
|  |     FBO sunShadowBuffer; | ||||||
|  |     // Создадим текстуры для буфера кадра
 | ||||||
|  |     Texture sunShadowDepth(sunShadow_resolution, sunShadow_resolution, GL_DEPTH_ATTACHMENT, 4, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT); | ||||||
|  |     // Отключим работу с цветом
 | ||||||
|  |     glDrawBuffer(GL_NONE); | ||||||
|  |     glReadBuffer(GL_NONE); | ||||||
|  |     // Активируем базовый буфер кадра
 | ||||||
|  |     FBO::useDefault(); | ||||||
|  | 
 | ||||||
|  |     // Шейдер для расчета теней
 | ||||||
|  |     ShaderProgram sunShadowShader; | ||||||
|  |     // Загрузим шейдер
 | ||||||
|  |     sunShadowShader.load(GL_VERTEX_SHADER, "shaders/sun_shadow.vert"); | ||||||
|  |     sunShadowShader.link(); | ||||||
|  |      | ||||||
|     // Шейдер для рисования отладочных лампочек
 |     // Шейдер для рисования отладочных лампочек
 | ||||||
|     ShaderProgram bulbShader; |     ShaderProgram bulbShader; | ||||||
|     // Загрузка и компиляция шейдеров
 |     // Загрузка и компиляция шейдеров
 | ||||||
| @ -183,6 +201,19 @@ int main(void) | |||||||
|         // Тут производится рендер
 |         // Тут производится рендер
 | ||||||
|         scene.render(gShader, material_data); |         scene.render(gShader, material_data); | ||||||
| 
 | 
 | ||||||
|  |         // Изменим размер вывода для тени
 | ||||||
|  |         glViewport(0, 0, sunShadow_resolution, sunShadow_resolution); | ||||||
|  |         // Активируем буфер кадра для теней от солнца
 | ||||||
|  |         sunShadowBuffer.use(); | ||||||
|  |         // Подключим шейдер для расчета теней
 | ||||||
|  |         sunShadowShader.use(); | ||||||
|  |         // Очистка буфера глубины
 | ||||||
|  |         glClear(GL_DEPTH_BUFFER_BIT); | ||||||
|  |         // Рендерим геометрию в буфер глубины
 | ||||||
|  |         scene.render(sunShadowShader, material_data); | ||||||
|  | 
 | ||||||
|  |         // Изменим размер вывода для окна
 | ||||||
|  |         glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); | ||||||
|         // Активируем базовый буфер кадра
 |         // Активируем базовый буфер кадра
 | ||||||
|         FBO::useDefault(); |         FBO::useDefault(); | ||||||
|         // Подключаем шейдер для прямоугольника
 |         // Подключаем шейдер для прямоугольника
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user