diff --git a/docs/03 Model Loading/02 Mesh.md b/docs/03 Model Loading/02 Mesh.md index 1d9fc3b..d056f75 100644 --- a/docs/03 Model Loading/02 Mesh.md +++ b/docs/03 Model Loading/02 Mesh.md @@ -163,14 +163,12 @@ void Draw(Shader shader) { glActiveTexture(GL_TEXTURE0 + i); // 在绑定之前激活相应的纹理单元 // 获取纹理序号(diffuse_textureN 中的 N) - stringstream ss; string number; string name = textures[i].type; if(name == "texture_diffuse") - ss << diffuseNr++; // 将 unsigned int 插入到流中 + number = std::to_string(diffuseNr++); else if(name == "texture_specular") - ss << specularNr++; // 将 unsigned int 插入到流中 - number = ss.str(); + number = std::to_string(specularNr++); shader.setFloat(("material." + name + number).c_str(), i); glBindTexture(GL_TEXTURE_2D, textures[i].id); @@ -184,7 +182,7 @@ void Draw(Shader shader) } ``` -这并不是最漂亮的代码,但这部分要归咎于C++[转换](http://www.cplusplus.com/articles/D9j2Nwbp/)int到string类型时太丑了。我们首先计算了每个纹理类型的N-分量,并将其拼接到纹理类型字符串上,来获取对应的uniform名称。接下来我们查找对应的采样器,将它的位置值设置为当前激活的纹理单元,并绑定纹理。这也是我们在Draw函数中需要着色器的原因。我们也将`"material."`添加到了最终的uniform名称中,因为我们希望将纹理储存在一个材质结构体中(这在每个实现中可能都不同)。 +我们首先计算了每个纹理类型的N-分量,并将其拼接到纹理类型字符串上,来获取对应的uniform名称。接下来我们查找对应的采样器,将它的位置值设置为当前激活的纹理单元,并绑定纹理。这也是我们在Draw函数中需要着色器的原因。我们也将`"material."`添加到了最终的uniform名称中,因为我们希望将纹理储存在一个材质结构体中(这在每个实现中可能都不同)。 !!! Important diff --git a/docs/03 Model Loading/03 Model.md b/docs/03 Model Loading/03 Model.md index e96d9b4..a71474e 100644 --- a/docs/03 Model Loading/03 Model.md +++ b/docs/03 Model Loading/03 Model.md @@ -298,7 +298,7 @@ vector loadMaterialTextures(aiMaterial *mat, aiTextureType type, string bool skip = false; for(unsigned int j = 0; j < textures_loaded.size(); j++) { - if(std::strcmp(textures_loaded[j].path.C_Str(), str.C_Str()) == 0) + if(std::strcmp(textures_loaded[j].path.data(), str.C_Str()) == 0) { textures.push_back(textures_loaded[j]); skip = true; @@ -310,7 +310,7 @@ vector loadMaterialTextures(aiMaterial *mat, aiTextureType type, string Texture texture; texture.id = TextureFromFile(str.C_Str(), directory); texture.type = typeName; - texture.path = str; + texture.path = str.C_Str(); textures.push_back(texture); textures_loaded.push_back(texture); // 添加到已加载的纹理中 } diff --git a/docs/04 Advanced OpenGL/09 Geometry Shader.md b/docs/04 Advanced OpenGL/09 Geometry Shader.md index eb966d8..a5a4a2a 100644 --- a/docs/04 Advanced OpenGL/09 Geometry Shader.md +++ b/docs/04 Advanced OpenGL/09 Geometry Shader.md @@ -441,7 +441,7 @@ void main() { gl_Position = projection * view * model * vec4(aPos, 1.0); mat3 normalMatrix = mat3(transpose(inverse(view * model))); - vs_out.normal = normalize(vec3(projection * vec4(normalMatrix * aNormal, 1.0))); + vs_out.normal = normalize(vec3(projection * vec4(normalMatrix * aNormal, 0.0))); } ```