OpenGL: Какие шейдеры для карты нормалей (bump map)? - PullRequest
0 голосов
/ 25 сентября 2019

Я не смог найти способ создания карты нормалей / ударов в PyOpenGL.В частности, я хочу карту, которую я могу прочитать с glReadPixels().Я не знаю, как получить карту в форме: (ширина, высота, нормали), то есть форма должна быть (wxhx 3).

Как я могу получить такую ​​карту?Какой фрагмент, вершина, геометрические шейдеры необходимы для этого?

Я предоставляю следующие входные данные для вершинного шейдера:

layout (location = 0) in vec3 vertexPosition_modelspace;
layout (location = 1) in vec3 normal;

uniform mat4 ModelMatrix;
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;

Я хотел бы получить гладкую карту нормалей, где каждый пиксельсоответствует нормализованному нормальному вектору.Какие шейдеры мне нужны для этого?Что мне нужно сделать, это визуализировать карту нормалей со сцены.Я использую марширующие кубы, чтобы получить треугольники, нормали и вершины.Я добавил нормальный буфер.У меня нет текстуры.

NormalBuffer = glGenBuffers(1)
print(NormalBuffer.shape)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, NormalBuffer)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, normal_arrays[i], GL_STATIC_DRAW)
normal_buffers[i] = NormalBuffer

Я использую это, чтобы нарисовать треугольники и связать буферный объект.

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, normal_buffers[i])
glVertexAttribPointer(1,           
                      3,      
                      GL_FLOAT,     
                      GL_FALSE,     
                      0,            
                      None)         

glDrawElements(GL_TRIANGLES,
               index[1]*index[0],
               GL_UNSIGNED_INT,
               None)

Можно ли отобразить карту нормалей с помощью шейдера икак?Можно ли так читать?

glReadPixels(0, 0, height, width, GL_RGB, GL_UNSIGNED_INT)
...