OpenGL 绘制一个三角形

在上一篇 OpenGL 顶点着色器和片段着色器的介绍实现中,我们向进一步绘制三角形,事实上只需要修改 一下两处即可

修改顶点着色器

// 顶点着色器const char* vertexShaderSource = R"( #version 460 corevoid main(){// 顶点坐标vec4 vertices[3] = vec4[3](vec4(0.0, 0.5, 0.0, 1.0),vec4(-0.5, -0.5, 0.0, 1.0),vec4(0.5, -0.5, 0.0, 1.0));gl_Position = vertices[gl_VertexID];})";

在顶点着色器中定义了三角形的顶点数组。
其次修改, glDrawArrays(GL_TRIANGLES, 0, 3);

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>using namespace std;const int numVAOs = 1;
GLuint renderingProgram;
GLuint VAO[numVAOs];// 创建着色器程序
GLuint createShaderProgram()
{// 顶点着色器const char* vertexShaderSource = R"( #version 460 corevoid main(){// 顶点坐标vec4 vertices[3] = vec4[3](vec4(0.0, 0.5, 0.0, 1.0),vec4(-0.5, -0.5, 0.0, 1.0),vec4(0.5, -0.5, 0.0, 1.0));gl_Position = vertices[gl_VertexID];})";// 片段着色器const char* fragmentShaderSource = R"( #version 460 coreout vec4 color;void main(){color = vec4(0.0, 0.0, 1.0, 1.0);})";// 创建顶点着色器和片段着色器GLuint vShader = glCreateShader(GL_VERTEX_SHADER);GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);// 将着色器代码附加到着色器对象上glShaderSource(vShader, 1, &vertexShaderSource, NULL);glShaderSource(fShader, 1, &fragmentShaderSource, NULL);// 编译着色器glCompileShader(vShader);glCompileShader(fShader);// 创建着色器程序GLuint shaderProgram = glCreateProgram();// 将着色器附加到程序上glAttachShader(shaderProgram, vShader);glAttachShader(shaderProgram, fShader);// 链接程序glLinkProgram(shaderProgram);return shaderProgram;
}// 初始化函数
void init(GLFWwindow* window)
{renderingProgram = createShaderProgram();glGenVertexArrays(numVAOs, VAO);glBindVertexArray(VAO[0]);
}// 渲染函数
void display(GLFWwindow* window, double currentTime)
{// 清除颜色缓冲区glClear(GL_COLOR_BUFFER_BIT);// 使用着色器程序glUseProgram(renderingProgram);// 设置点的大小//glPointSize(30.0f);// 绘制点glDrawArrays(GL_TRIANGLES, 0, 3);// 交换缓冲区glfwSwapBuffers(window);
}// 主函数
int main()
{if (!glfwInit()) { exit(EXIT_FAILURE); }glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);// 创建 GLFW 窗口GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter2 - 2.2", nullptr, nullptr);glfwMakeContextCurrent(window);if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }glfwSwapInterval(1);// 初始化 OpenGLinit(window);// 渲染循环while (!glfwWindowShouldClose(window)) {display(window, glfwGetTime());glfwPollEvents();}// 销毁窗口glfwDestroyWindow(window);glfwTerminate();exit(EXIT_SUCCESS);return 0;
}```![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f8deeb9ec3e24f049cb105bc99ee3440.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试高招:程序员如何在面试中脱颖而出

Java面试高招&#xff1a;程序员如何在面试中脱颖而出 《Java面试高招&#xff1a;程序员如何在面试中脱颖而出》摘要引言面试经历面试失败的反思 面试技巧侦探式的问题解决无敌铁金刚的坚定决心 参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1…

4.5 A TILED MATRIX MULTIPLICATION KERNEL

我们现在准备展示一个tiled矩阵乘法内核&#xff0c;该内核使用共享内存来减少对全局内存的流量。图中4.16显示的内核。实施图4.15.中所示的阶段。在图4.16中&#xff0c;第1行和第2行声明Mds和Nds为共享内存变量。回想一下&#xff0c;共享内存变量的范围是一个块。因此&#…

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…

Linux磁盘空间与文件大小查看命令详解

1. 查看磁盘空间大小 在Linux系统中&#xff0c;有多个命令可以用来查看磁盘空间的使用情况。最常用的命令是df&#xff08;disk free&#xff09;。 df -hdf命令的 -h 选项以人类可读的方式显示磁盘空间&#xff0c;该命令将显示文件系统的使用情况、剩余空间等信息。 2. 查看…

书生·浦语大模型全链路开源体系 学习笔记 第二课

基础作业&#xff1a; 使用 InternLM-Chat-7B 模型生成 300 字的小故事&#xff08;需截图&#xff09;。熟悉 hugging face 下载功能&#xff0c;使用 huggingface_hub python 包&#xff0c;下载 InternLM-20B 的 config.json 文件到本地&#xff08;需截图下载过程&#xf…

tiktok云手机有用吗?用哪个好?

很多做独立站的跨境卖家都会搭配一些社媒平台给自己引流带货&#xff0c;比如说目前很火的TikTok&#xff0c;这也是目前比较有效的一种引流方式。本文将介绍tiktok运营方法以及如何用tiktok云手机规避运营风险。 TikTok是个不错的风口&#xff0c;不过我们在国内想要运营好Tik…

数环通12月产品更新:新增数据表相关功能、优化编辑器,15+应用进行更新

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通12月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

软考-软件设计师 知识点整理(一篇就过了 建议收藏)

文章目录 一 计算机组成CPU寻址方式校验码奇偶校验码&#xff08;只能检一位错&#xff0c;并且不能纠错&#xff09;循环冗余校验码CRC&#xff08;只能检错&#xff0c;不能纠错&#xff09;海明码 计算机体系结构分类Flynn分类法&#xff08;理论存在&#xff1a;多指令单数…

机器学习-聚类算法详解

K-maens & DBSCAN 与分类、回归任务不同&#xff0c;聚类任务事先并不知道任何样本标签&#xff0c;通过数据之间的内在关系把样本划分为若干类别&#xff0c;使得同类别之间的相似度高&#xff0c;不同类别之间的样本相似度低。 K-means 基本思想 K-means算法的基本思想是…

Java LeetCode篇-二叉搜索树经典解法(实现:二叉搜索树的最近公共祖先、根据前序遍历建树等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 判断合法 1.1 使用遍历方式实现验证二叉搜索树 1.2 使用递归方式实现验证二叉搜索树 2.0 求范围和 2.1 使用非递归实现二叉搜索树的范围和 2.2 使用递归方式实现…

『CV学习笔记』Pyinstaller打包exe后,执行时onnxruntime包报警告(Init provider bridge failed)

Pyinstaller打包exe后,执行时onnxruntime包报警告(Init provider bridge failed) 文章目录 一. 问题描述二. 解决办法三. 参考文献『CV学习笔记』Pyinstaller打包python程序遇到的问题(Win&Linux)+Cython编译动态库+PyArmor加密一. 问题描述 Platform: WindowsONNX Runtim…

腾讯云com域名注册1元一年,非常可以!

腾讯云com域名注册优惠价格1元首年&#xff0c;条件是企业新用户&#xff0c;个人新用户注册com域名是33元首年&#xff0c;第二年续费价格85元一年。活动 txybk.com/go/domain-sales 活动打开如下图&#xff1a; 腾讯云com域名注册优惠价格 腾讯云com域名注册原价是85元一年&a…

已解决 ValueError: Setting an array element with a sequence. 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

C语言—第1次作业:编译与连接基础知识

常做练习巩固知识 本次作业答案链接如下&#xff1a; 答案解析——C语言—第1次作业&#xff1a;编译与连接基础知识 1.字符串的结束标志是&#xff1a;&#xff08; &#xff09; A.是0 B.是EOF C. 是\0 D.是空格 2.关于C语言关键字说法正确的是&#xff1a;( ) A.关…

C++类与对象基础(6)

(注&#xff1a;本篇文章介绍部分内容时&#xff0c;需要用到上盘文章中日期类的代码&#xff0c;文章链接如下&#xff1a;C类与对象基础(5)——日期类的实现-CSDN博客​​​​​​&#xff09; 目录 1. 运算符重载的相关补充&#xff1a; 1.1流运算符重载出现的问题&#x…

李沐-《动手学深度学习》--03-注意力机制

一、注意力机制 1 . 注意力提示 1&#xff09;框架 **随意&#xff1a;**跟随自己的想法的&#xff0c;自主的想法&#xff0c;例如query **不随意&#xff1a;**没有任何偏向的选择&#xff0c;例如 Keys 如何得到 k v q 2&#xff09;Nadaraya-Watson核回归 就是一个so…

大模型中的幻觉问题:根源、影响与解决方案

语言模型中的幻觉问题&#xff1a;根源、影响与解决方案 1、幻觉问题的定义2、幻觉问题的根源3、解决幻觉问题的方法4、结论 在人工智能和自然语言处理领域&#xff0c;大规模语言模型&#xff08;LLM&#xff09;已成为研究和应用的热点。这些模型在理解和生成自然语言方面表现…

Verilog--逻辑操作符、位操作符与规约操作符

逻辑操作符 输入&#xff1a;两个操作数 输出&#xff1a;true 或 false&#xff0c;布尔值 逻辑与 && 逻辑或 || 逻辑非 &#xff01; 位操作符 输入&#xff1a;两个操作数 输出&#xff1a;与输入同位宽的二进制 非 ~ 与 & 或 | 异或 ^ 规约操作符 输入&am…

《2024 AIGC 应用层十大趋势白皮书》:近屿智能OJAC带您一起探索AI未来

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 近日国际知名咨询机构IDC发布《2024 AIGC 应用层十大趋势白皮书》的发布&am…

Spring 动态数据源事务处理

在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的。然而,在一些复杂的业务场景下,如需要在某一时刻访问不同的数据库,由于 Spring 对于事务管理实现的方式,可能不能达…