当前位置: 代码迷 >> 综合 >> LearnOpenGL PBR章节最后一个手枪模型导入需要注意的问题
  详细解决方案

LearnOpenGL PBR章节最后一个手枪模型导入需要注意的问题

热度:67   发布时间:2024-02-01 19:14:20.0

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");

否则加载的纹理是反着的,结果也是不对的。