简单着色器编写(下)

这篇具有很好参考价值的文章主要介绍了简单着色器编写(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

函数部分介绍完了,最后来介绍一下main函数中的部分。

std::string vertexShader =
    "#version 330 core\n"
    "\n"
    "layout(location=0)in vec4 position;"
    "\n"
    "void main()\n"
    "{\n"
    "  gl_Position = position;\n"
    "}\n";

std::string fragmentShader =
    "#version 330 core\n"
    "\n"
    "layout(location=0)out vec4 color;"
    "\n"
    "void main()\n"
    "{\n"
    "  color=vec4(1.0,0.0,0.0,1.0);\n"
    "}\n";

  • std::string vertexShader:这是一个定义了顶点着色器源代码的字符串变量。

  • "#version 330 core\n":这是一行字符串,表示OpenGL的版本号和着色器的核心(core)版本,这里使用的是OpenGL 3.3 core profile。

  • "layout(location=0)in vec4 position;":这是顶点着色器的输入声明,指定了一个输入属性 position,它的位置索引是 0,表示顶点坐标。

  • "void main()\n":这是顶点着色器的主函数,它是着色器的入口点,用于对顶点进行处理。

  • "gl_Position = position;\n":这是顶点着色器的主要操作,将传入的顶点坐标赋值给内置的输出变量 gl_Position,这样OpenGL会将这个顶点坐标进行透视变换等操作,最终决定它在屏幕上的位置。

  • std::string fragmentShader:同理,这是定义了片元着色器源代码的字符串变量。

  • "layout(location=0)out vec4 color;":这是片元着色器的输出声明,指定了一个输出变量 color,它的位置索引是 0,表示输出的片元颜色。

  • "color=vec4(1.0,0.0,0.0,1.0);":这是片元着色器的主要操作,将输出的片元颜色设置为红色(RGBA为1.0, 0.0, 0.0, 1.0),从而在屏幕上渲染出红色的图像。

这两个着色器源代码字符串定义了如何处理顶点和片元,并且最终通过链接和使用程序对象来在屏幕上绘制一个红色的三角形。

有人可能会问,这不就是一些字符串吗,怎么发挥作用的?

这些确实是一些字符串,但在OpenGL中,这些字符串是用来定义着色器程序的源代码的。这些源代码描述了OpenGL如何处理顶点和片元数据,从而实现图形渲染。

当你将这些字符串传递给OpenGL的函数时,OpenGL会将它们编译成真正的着色器对象,这些对象可以在GPU上执行。编译后的着色器对象将根据你的代码逻辑进行计算,以及在屏幕上绘制出图像。

所以,这些字符串实际上是描述了一系列计算步骤的指令,这些指令会告诉GPU如何处理顶点数据、应用纹理、计算颜色等操作,最终呈现出你所期望的图形效果。虽然它们看起来只是普通的字符串,但在OpenGL的上下文中,它们承载着实际的图形渲染逻辑。

unsigned int shader = CreateShader(vertexShader,fragmentShader);
glUseProgram(shader);

unsigned int shader = CreateShader(vertexShader, fragmentShader); 这一行是用来创建一个着色器程序的过程。

具体来说,这行代码调用了之前定义的 CreateShader 函数,将顶点着色器代码 vertexShader 和片元着色器代码 fragmentShader 作为参数传递给该函数。函数内部会编译这两个着色器并链接成一个完整的着色器程序。最后,返回的 unsigned int 类型的值 shader 就代表了这个着色器程序的标识符。

这个着色器程序包含了定义的顶点着色器和片元着色器,通过调用 glUseProgram(shader) 可以激活这个着色器程序,从而在渲染时使用这些着色器对顶点和片元进行处理。

整个着色器的编写已经介绍完毕,让我们来看看最后的效果吧!

 简单着色器编写(下),着色器,c++,OpenGL

 文章来源地址https://www.toymoban.com/news/detail-678248.html

到了这里,关于简单着色器编写(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenGL和OpenGL ES显示YUV图片的着色器差别(一)

    这里解释的只是用于显示YUV图片的代码,没有增加任何效果: OpenGL 的片段着色器片段: OpenGL 的顶点着色器片段: OpenGL ES 的片段着色器片段: OpenGL ES的顶点着色器片段: 差别: 添加了  #version 320 es  指令,指定使用 OpenGL ES 3.2 版本。 使用  in  和  out  替代了原来

    2024年02月02日
    浏览(28)
  • OpenGL ES 3.0 着色器程序二进制化

    之前有位读者提问:C++ 如何将 OpenGL ES 的着色器程序二进制(保存),然后在其他地方加载使用?现在写篇文章介绍下。 将着色器程序二进制化(Shader Program Binary)有哪些好处? 快速加载和解析 :使用二进制形式的着色器程序可以更快地加载和解析,因为不需要进行编译和

    2024年02月07日
    浏览(30)
  • OpenGL ES 2.0 for Android教程(二):定义顶点和着色器

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章介绍我们

    2023年04月14日
    浏览(28)
  • OpenGL ES 2.0 for Android教程(三):编译着色器并绘制到屏幕

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章将继续我

    2023年04月26日
    浏览(47)
  • 【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 虽然OpenGL的三维制图功能非常强大,但是它主要为计算机设计的,对于嵌入式设备和移动端设备来说显得比较臃肿,所以业界又设计了专供嵌入式设备的OpenGL ES 它相当于OpenGL的精简版,因为嵌入式设备追求性价比,所以能不做的

    2024年02月04日
    浏览(35)
  • vscode shadertoy插件,非常方便的glsl着色器编写工具

    很著名的shadertoy网站,集合了非常多大神利用数学写出美妙的shader效果。像shadertoy创始人之一的IQ大神它在这方面有很多的建树。他的利用光线步进和躁声可以创建很多不可思议的3D场景。  vscode有一件shadertoy的插件,安装后可以新建一个*.glsl文件,写好代码就可以直接运行看

    2024年04月09日
    浏览(26)
  • OpenGL ES入门教程(一)编写第一个OpenGL程序

    从本文开始我将参考学习OpenGL ES应用开发实践指南 Android卷 [(美)KevinBrothaler著](提取码: 394m),并基于自己的理解以更加通俗易懂的方式讲解如何应用OpenGL ES。本系列教程的目标是应用OpenGL,所以不会涉及太多的理论知识,主要讲解方式是基于简单功能的代码拆解,学会对

    2024年02月06日
    浏览(39)
  • 让AI臣服,而不是被它替代!让ChatGPT为我们编写Unity3d Shaderlab的着色器(shader)

    ChatGPT的火热大家应该都有目共睹,文案工作者、翻译工作者和画师等各种行业都在被嘲即将失业。不光是这些岗位的员工,作为资深社畜程序猿也能感受到会受到冲击。网上很多人都在发ChatGPT写的代码,并开始大肆宣扬AI要取代程序员了,今天测一测使用ChatGPT来生成一些代码,

    2023年04月23日
    浏览(34)
  • 计算机图形学,OpenGL编写的一个可实现旋转缩放移动的房间,内有数十种交互

    #include stdlib.h #includestdio.h #includewindows.h #include GL/glut.h #include math.h #include gl/GLU.h //颜色宏定义 #define white 1.0f, 1.0f, 1.0f #define black 0.0f, 0.0f, 0.0f #define red 1.0f, 0.0f, 0.0f #define blue 0.0f, 0.0f, 1.0f #define skyBlue 135.0/255.0, 206.0/255.0, 1.0f #define plum 1.0f, 187.0/255.0, 1.0f //浅紫色 #define pink 1.0f, 1

    2024年04月17日
    浏览(55)
  • 实验二:OpenGL的简单动画

    一、实验目的 1.掌握OpenGL的闲置函数。 2.掌握OpenGL的时间函数。 3.掌握OpenGL的简单动画功能。 4.了解OpengGL裁剪窗口、视区、显示窗 口的概念和它们之间的关系。 5.进一步掌握OpenGL基本图元的绘制。 二、实验内容 1.闲置函数的使用与简单动画。 1)旋转的六边形如实验图2-1所

    2024年02月05日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包