From 10e78fa03ff13554503b9dd787f9b9f212ac911c Mon Sep 17 00:00:00 2001 From: iridiumR Date: Wed, 24 May 2023 15:16:30 +0800 Subject: [PATCH] feat(OpenGL-hello): tex v2 --- OpenGL/hello/resources/awesomeface.png | Bin 0 -> 40855 bytes OpenGL/hello/src/main.cpp | 95 +++++++++++++++++-------- OpenGL/hello/src/tex.fs | 5 +- 3 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 OpenGL/hello/resources/awesomeface.png diff --git a/OpenGL/hello/resources/awesomeface.png b/OpenGL/hello/resources/awesomeface.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bfec6614d6120050aa7c36f582f91ba8a271bc GIT binary patch literal 40855 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 z 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 BeDDAO literal 0 HcmV?d00001 diff --git a/OpenGL/hello/src/main.cpp b/OpenGL/hello/src/main.cpp index 3548169..ed53e3b 100644 --- a/OpenGL/hello/src/main.cpp +++ b/OpenGL/hello/src/main.cpp @@ -57,31 +57,6 @@ int main() { // 创建着色器程序 Shader shader = Shader("src/tex.vs", "src/tex.fs"); - // 创建纹理 - unsigned int texture; - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); - // 设置纹理环绕方式 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - // 设置纹理过滤方式 - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - // 加载并生成纹理 - int width, height, nrChannels; - unsigned char *data = - stbi_load("resources/container.jpg", &width, &height, &nrChannels, 0); - if (data) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, - GL_UNSIGNED_BYTE, data); - glGenerateMipmap(GL_TEXTURE_2D); - } else { - std::cout << "Failed to load texture" << std::endl; - } - stbi_image_free(data); - unsigned int VAO, VBO, EBO; // 创建顶点数组对象 glGenVertexArrays(1, &VAO); @@ -110,6 +85,66 @@ int main() { (void *)(6 * sizeof(float))); glEnableVertexAttribArray(2); + // 创建纹理 + unsigned int texture1, texture2; + glGenTextures(1, &texture1); + glBindTexture(GL_TEXTURE_2D, texture1); + // 设置纹理环绕方式 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + // 设置纹理过滤方式 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + // 加载并生成纹理 + int width, height, nrChannels; + // 图片翻转y轴 + stbi_set_flip_vertically_on_load(true); + unsigned char *data = + stbi_load("resources/container.jpg", &width, &height, &nrChannels, 0); + if (data) { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, + GL_UNSIGNED_BYTE, data); + glGenerateMipmap(GL_TEXTURE_2D); + } else { + std::cout << "Failed to load texture" << std::endl; + } + stbi_image_free(data); + + glGenTextures(1, &texture2); + glBindTexture(GL_TEXTURE_2D, texture2); + // 设置纹理环绕方式 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + // 设置纹理过滤方式 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + // 加载并生成纹理 + // 图片翻转y轴 + stbi_set_flip_vertically_on_load(true); + data = + stbi_load("resources/awesomeface.png", &width, &height, &nrChannels, 0); + if (data) { + + // note that the awesomeface.png has transparency and thus an alpha channel, + // so make sure to tell OpenGL the data type is of GL_RGBA + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, + GL_UNSIGNED_BYTE, data); + glGenerateMipmap(GL_TEXTURE_2D); + } else { + std::cout << "Failed to load texture" << std::endl; + } + stbi_image_free(data); + + // 激活着色器 + shader.use(); + // 绑定纹理 + shader.setInt("texture1", 0); + shader.setInt("texture2", 1); + // 循环渲染 while (!glfwWindowShouldClose(window)) { // 处理输入 @@ -120,15 +155,15 @@ int main() { glClear(GL_COLOR_BUFFER_BIT); // 绑定纹理 - glBindTexture(GL_TEXTURE_2D, texture); - - // 激活着色器 - shader.use(); + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, texture1); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, texture2); // 绘制三角形 + shader.use(); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - glBindVertexArray(0); // 检查并调用事件,交换缓冲 glfwSwapBuffers(window); diff --git a/OpenGL/hello/src/tex.fs b/OpenGL/hello/src/tex.fs index 1b549f5..b762a3a 100644 --- a/OpenGL/hello/src/tex.fs +++ b/OpenGL/hello/src/tex.fs @@ -4,9 +4,10 @@ out vec4 FragColor; in vec3 ourColor; in vec2 TexCoord; -uniform sampler2D ourTexture; +uniform sampler2D texture1; +uniform sampler2D texture2; void main() { - FragColor = texture(ourTexture, TexCoord) * vec4(ourColor, 1.0);; + FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), 0.2); } \ No newline at end of file