openGL高级光照部分目录 见 openGL高级光照部分目录
我们一般拿
这个的代码修改成最后的显示效果:
但是修改需要注意一些问题:
一、首先是为了让程序调用我们自己输入的PBR纹理,我们需要把纹理的序号设置的高一点:
pbrShader.setInt("irradianceMap", 5);pbrShader.setInt("prefilterMap", 6);pbrShader.setInt("brdfLUT", 7);pbrShader.setInt("albedoMap", 8);//pbrShader.setInt("normalMap", 9);//pbrShader.setInt("metallicMap", 10);//pbrShader.setInt("roughnessMap", 11);//pbrShader.setInt("aoMap", 12);
不然会被模型里面(Mesh.h)的绑定纹理覆盖掉前几个(或者把Draw函数里面的绑定纹理部分注释掉)。
二、其次是顶点缓冲的排列,我们用来修改的代码里面是这样:
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 aTexCoords;
layout(location = 2) in vec3 aNormal;
但是模型是这样的:
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aNormal;
layout(location = 2) in vec2 aTexCoords;
所以需要修改一下,不然就会出现这种效果:
三、以及我们需要在加载纹理之前把变为 false:
stbi_set_flip_vertically_on_load(false);
int albedoMap = loadTexture("C:/Developer/openGL/LearnOpenGL2/resources/objects/Cerberus_by_Andrew_Maximov/Textures/Cerberus_A.tga");int normalMap = loadTexture("C:/Developer/openGL/LearnOpenGL2/resources/objects/Cerberus_by_Andrew_Maximov/Textures/Cerberus_N.tga");int metallicMap = loadTexture("C:/Developer/openGL/LearnOpenGL2/resources/objects/Cerberus_by_Andrew_Maximov/Textures/Cerberus_M.tga");int roughnessMap = loadTexture("C:/Developer/openGL/LearnOpenGL2/resources/objects/Cerberus_by_Andrew_Maximov/Textures/Cerberus_R.tga");int aoMap = loadTexture("C:/Developer/openGL/LearnOpenGL2/resources/objects/Cerberus_by_Andrew_Maximov/Textures/Cerberus_AO.tga");
否则加载的纹理是反着的,结果也是不对的。