画一个正方形

其实,画正方形就是画两个三角形,用四个顶点以及使用索引来实现
完整代码在Square项目的Application.cpp里
先贴上窗口初始化代码

void BaseInit()
{glfwInit();//初始化glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置GLFWglfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//配置GLFWglfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);float screenWidth = 800.0f;float screenHeight = 600.0f;//创建窗口glWindow = glfwCreateWindow(screenWidth, screenHeight, "LearnOpenGL", nullptr, nullptr);if (glWindow == nullptr){cout << "Failed to create GLFW window" << endl;glfwTerminate();return;}glfwMakeContextCurrent(glWindow);if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return;}

画一个普通的正方形

void NormalSquare()
{float vertices[] = {//     ---- 位置 ----0.5f,  0.5f, 0.0f,  // 右上0.5f, -0.5f, 0.0f,  // 右下-0.5f, -0.5f, 0.0f,  // 左下-0.5f,  0.5f, 0.0f,  // 左上};//索引unsigned int indices[] = {0,1,3,1,2,3};//编译着色器Shader ourShader("vertex_1.vs", "fragment_1.fs");ourShader.use();//glUseProgram(shaderProgram);unsigned int VAO;//顶点数组glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);//绑定顶点数组缓存unsigned int VBO;glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//绑定索引缓存unsigned int EBO;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, 3 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);while (!glfwWindowShouldClose(glWindow)){glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);//drawglBindVertexArray(VAO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);glfwPollEvents();glfwSwapBuffers(glWindow);}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteBuffers(1, &EBO);glfwTerminate();
}

最终效果

画一个彩色的正方形

和上一个笔记里画彩色三角形的逻辑一样,在顶点属性后面加上颜色属性,设置数据访问指针的属性,记得顶点着色器要加上颜色的输入(步长和相位)

//彩色正方形
void ColourfulSquare()
{float vertices[] = {//     ---- 位置 ----       ---- 颜色 ---- 0.5f,  0.5f, 0.0f,   1.0f, 0.0f, 0.0f,  // 右上0.5f, -0.5f, 0.0f,   0.0f, 1.0f, 0.0f,  // 右下-0.5f, -0.5f, 0.0f,   0.0f, 0.0f, 1.0f,  // 左下-0.5f,  0.5f, 0.0f,   1.0f, 1.0f, 0.0f,  // 左上};//索引unsigned int indices[] = {0,1,3,1,2,3};//编译着色器Shader ourShader("vertex_4.vs", "fragment_4.fs");ourShader.use();//glUseProgram(shaderProgram);unsigned int VAO;//顶点数组glGenVertexArrays(1, &VAO);glBindVertexArray(VAO);//绑定顶点数组缓存unsigned int VBO;glGenBuffers(1, &VBO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//绑定索引缓存unsigned int EBO;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, 6 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);// 颜色属性glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float))); //最后一个参数是数据的起点glEnableVertexAttribArray(1);while (!glfwWindowShouldClose(glWindow)){glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);//drawglBindVertexArray(VAO);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);glBindVertexArray(0);glfwPollEvents();glfwSwapBuffers(glWindow);}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glDeleteBuffers(1, &EBO);glfwTerminate();
}

最终效果

可以试试线框模式,在while之前加上
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
效果图

转载于:https://www.cnblogs.com/NightFrost/p/10792605.html

OpenGL学习笔记(2) 画一个正方形相关推荐

  1. OpenGL学习笔记:画点、直线和多边形(第二讲)

    1.关于点  点的大小默认为1个像素,但也可以改变之. 改变的命令为glPointSize,其函数原型如下:  void glPointSize(GLfloat size);  size必须大于0.0 ...

  2. OpenGL学习笔记:画点、直线和多边形(第一讲)

    我的运行环境: CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) OpenGL实现厂商的名字:VMware, Inc. 渲染器标识符:Galliu ...

  3. OpenGL学习笔记:第一个OpenGL程序完全注释

    运行环境: CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) OpenGL实现厂商的名字:VMware, Inc. 渲染器标识符:Gallium ...

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

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

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

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

  6. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用

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

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

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

  8. OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结

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

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

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

最新文章

  1. Python网络爬虫 - 一个简单的爬虫例子
  2. smartsql和mysql_SmartSql 常见问题
  3. iptables 限制网速
  4. [InnoDB系列] -- SHOW INNODB STATUS 探秘
  5. wxWidgets:命名空间
  6. SGU 248. Integer Linear Programming( 背包dp )
  7. [LeetCode] Interleaving String
  8. 【开源组件】一份值得收藏的的 MySQL 规范
  9. java的string访问某个元素_CSS伪类与伪元素总是傻傻分不清,这份总结够面试用了
  10. nginx proxy_cache缓存详解
  11. android中画弧函数canvas.drawArc()之理解
  12. Daily Scrum 12/9/2015
  13. HTML案例登录页面
  14. intel cpu core/“酷睿”系列发展史,供组装机的朋友们参考
  15. Cron范式每日凌晨一点执行
  16. SQL 注入速查表大全
  17. 853-两台计算机之间是如何通信的?
  18. Shiro和SpringSecurity
  19. 三轮DES差分攻击(免费完整代码)
  20. 今天的样子,绝非偶然

热门文章

  1. asp正则替换链接实现伪静态效果
  2. 如何使VS2008 调试网站的根目录和IIS调试的一致?
  3. 利用PHP的Popen实现RRDTOOL作图的动态输出
  4. IE – File - Work Offline
  5. java音乐播放器脚本之家,分享|3 个开源的音乐播放器:Aqulung、Lollypop 和 GogglesMM...
  6. 适配器模式(Adapter)和外观模式(Facade)
  7. OK6410裸机开发之LED灯
  8. 对ListView滚动状态的监听
  9. 引导界面(二)使用ViewPager实现欢迎引导页面
  10. 多态定义、多态实现、多态分类。