首页 > 解决方案 > OpenGL:法线贴图(凹凸贴图)的哪些着色器?

问题描述

我找不到在 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)

标签: pythonopenglglslpyopenglbump-mapping

解决方案


推荐阅读