将图片贴上自己画好的矩形
效果如下:

源码

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <cmath>
#include <iostream>
#include <fstream>
#include <sstream>
#include <stb_image.h>
using namespace std;void processInput(GLFWwindow *window)
{if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{// make sure the viewport matches the new window dimensions; note that width and// height will be significantly larger than specified on retina displays.glViewport(0, 0, width, height);
}int main() {glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);GLFWwindow* window = glfwCreateWindow(800, 600, "123", NULL, NULL);glfwMakeContextCurrent(window);gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);fstream vfile, ffile;vfile.open("4.1.texture.vs", fstream::in | fstream::out);ffile.open("4.1.texture.fs", fstream::in | fstream::out);stringstream vstream, fstream;vstream << vfile.rdbuf();fstream << ffile.rdbuf();vfile.close();ffile.close();string vstring = vstream.str();string fstring = fstream.str();const char *vcode = vstring.c_str();const char *fcode = fstring.c_str();uint vertex = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertex, 1, &vcode, NULL);glCompileShader(vertex);uint fragment = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragment, 1, &fcode, NULL);glCompileShader(fragment);uint ID = glCreateProgram();glAttachShader(ID, vertex);glAttachShader(ID, fragment);glLinkProgram(ID);glDeleteShader(vertex);glDeleteShader(fragment);float vectices[] = {//位置                 //颜色               //底纹0.5f,  0.5f,  0.0f,  1.0f,  0.0f,  0.0f,  1.0f,  1.0f,0.5f, -0.5f,  0.0f,  0.0f,  1.0f,  0.0f,  1.0f,  0.0f,-0.5f, -0.5f,  0.0f,  0.0f,  0.0f,  1.0f,  0.0f,  0.0f,-0.5f,  0.5f,  0.0f,  1.0f,  1.0f,  0.0f,  0.0f,  1.0f};unsigned int indices[] = {0, 1, 3, // first triangle1, 2, 3  // second triangle};uint VAO, VBO, EBO;glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);glGenBuffers(1,&VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vectices), vectices, GL_STATIC_DRAW);glGenBuffers(1, &EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(0 * sizeof(float)));glEnableVertexAttribArray(0);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));glEnableVertexAttribArray(1);glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));glEnableVertexAttribArray(2);uint texture;glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_2D, texture);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//s轴glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);//t轴glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//纹理过滤方式glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//纹理过滤方式int width, height, nrChannels;stbi_set_flip_vertically_on_load(true);unsigned char *data = stbi_load("../resources/textures/ebichu.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);while(!glfwWindowShouldClose(window)){processInput(window);glClearColor(0.8f, 0.0f, 0.8f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);glBindTexture(GL_TEXTURE_2D, texture);glUseProgram(ID);glBindVertexArray(VAO);//glDrawArrays(GL_TRIANGLES, 0 , 3);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glfwSwapBuffers(window);glfwPollEvents();}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteBuffers(1, &EBO);glfwTerminate();return 0;
}

其中还涉及到一个头文件stb_image.h,这是一个单头文件图像加载库
下载地址:https://github.com/nothings/stb/blob/master/stb_image.h

OpenGL学习笔记(七)底纹相关推荐

  1. OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...

  2. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

  3. 【OpenGL学习笔记⑥】——3D变换【旋转的正方体 实现地月系统 旋转+平移+缩放】

    ✈️ 文章目录 零. 成果预览图 一.3D立方体的顶点数组 二.纹理旋转 三.纹理缩放 四.画n个3D图形 五.轨道的数学公式 六.深度缓冲(Z 缓冲) 七.完整代码 八.参考附录: 神器的正方体 ☁ ...

  4. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

  6. websocket 获取连接id_Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证...

    Swoole学习笔记七:搭建WebSocket长连接 之 使用 USER_ID 作为身份凭证 2年前 阅读 3678 评论 0 喜欢 0 ### 0.前言 前面基本的WebSocket操作,我们基本都 ...

  7. ROS学习笔记七:使用rqt_console和roslaunch

    ROS学习笔记七:使用rqt_console和roslaunch 本节主要介绍在调试时使用的rqt_console和rqt_logger_level,以及一次性打开多个节点的工具roslaunch. ...

  8. 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练

    [K210]K210学习笔记七--使用K210拍摄照片并在MaixHub上进行训练 前言 K210准备工作 K210如何拍摄照片 准备工作 拍摄相关代码定义 用K210拍摄到的照片在MaixHub平台 ...

  9. OpenGL学习笔记:矩阵变换

    文章目录 缩放 glm矩阵表示 glm缩放矩阵实现 位移 齐次坐标 glm位移矩阵实现 旋转 沿x轴旋转 沿y轴旋转 沿z轴旋转 沿任意轴旋转 glm旋转矩阵实现 矩阵的组合 glm矩阵组合使用 接上 ...

  10. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

最新文章

  1. linux服务器性能监控命令汇总之dstat命令(二)
  2. 零基础自学python的建议-python 零基础建议学习吗 学习后工作稳定吗?
  3. 使用docker搭建Hadoop
  4. 最初步软件需求说法的简单调查报告
  5. ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST
  6. 软考网络管理员学习笔记8之第八章网络安全技术
  7. lc 115. Distinct Subsequences
  8. 戴尔融合“刀片”+双活存储助用户三网改造
  9. 【vue项目使用echarts实现区域地图绘制,且可点击单独区域】
  10. [Bootstrap]组件(二)
  11. Delphi Invalidate的用法
  12. 使用For XML与XSL(XSLT)配套快速输出查询结果到Web页面
  13. 电驴维持友情链接地址、更新服务器列表
  14. Linux之恢复删除的数据
  15. 使用 ffmpeg 转换视频格式 mp4 webm
  16. kruskal java_Kruskal算法java版
  17. 职高内蒙古计算机系高考最高分,内蒙古一考生高考668分,数学拿到满分,查分时还在淡定吃烧烤...
  18. XP和Java大战,谁胜一筹?
  19. Android 平板应用隐藏状态栏和底下的导航栏(navigation bar)
  20. 传统推荐模型(一)协同过滤算法_UserCF和ItemCF

热门文章

  1. 母公司背书,浪潮与IBM10亿合资的IPS携POWER9全线新品亮相
  2. javascript对指定元素添加父元素
  3. .net 平台下的数学库math.net(一)
  4. 2 开源Math.NET基础数学类库使用矩阵向量计算
  5. 从王者荣耀看设计模式(保护代理模式)
  6. spring5快速入门
  7. Javascript - 如何代码中字符串换行书写
  8. uniapp 画中画悬浮窗(视频) Ba-VideoPip
  9. Qt 崩溃 corrupted double-linked list Aborted
  10. vb.net 教程 5-3 使用未安装的字体