Запись ID объекта в текстуру

This commit is contained in:
Ковалев Роман Евгеньевич 2023-04-03 10:26:47 +03:00 committed by re.kovalev
parent 16e2763a69
commit 66673ed870
2 changed files with 7 additions and 1 deletions

View File

@ -15,6 +15,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 sampler2D tex_normal;
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;
} }

View File

@ -130,13 +130,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_RGB32F, GL_RGB); // Позиция вершины Texture gPosition(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 0, GL_RGB32F, 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());