feat(OpenGL-hello): tex v2
This commit is contained in:
parent
7a290b9734
commit
10e78fa03f
3 changed files with 68 additions and 32 deletions
BIN
OpenGL/hello/resources/awesomeface.png
Normal file
BIN
OpenGL/hello/resources/awesomeface.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
Reference in a new issue