C++和OpenGL实现3D游戏编程【连载17】——着色器进阶

欢迎来到zhooyu的专栏。
主页网址:【zhooyu】
专栏网址:【C++和OpenGL实现3D游戏编程】

🌟🌟🌟这里将通过一个OpenGL实现3D游戏编程实例教程,带大家深入学习OpenGL知识。知识无穷而人力有穷,希望能对您有所帮助。

🌟🌟🌟该教程为系列教程,每一步都有详细的教学和实例,推荐大家通过🔥C++和OpenGL实现3D游戏编程【目录】系统性的了解开发过程,了解怎样一步一步从简单入手,借助C++和OpenGL实现强大的3D效果。

🌟🌟🌟同时您可以在QQ群(群号:739903792)中与大家进行沟通交流,共同解决编程过程中的困惑。

在这里插入图片描述
着色器纹理操作基础演示:

着色器纹理操作基础

🔥C++和OpenGL实现3D游戏编程【目录】

1、本节要实现的内容

在前面着色器初步一节我们了解了着色器的一些初步知识,通过顶点着色器和片段着色器显示出了一个彩色的立方体。我们这节课就来了解一些在着色器中显示纹理等一系列实用操作,同时了解一些进阶的图像渲染技术,比如图像的灰度化处理,像游戏中灵魂状态下世界进行灰度化处理后的效果。使用GLSL渲染纹理是一种非常有用的技术,可以实现高效的图形处理和渲染,并且可以根据具体的应用场景和需求进行更复杂的渲染操作。

在这里插入图片描述

2、着色器显示纹理

我们前面学习了着色器显示立方体方法,但是还没有通过着色器给立方体添加图片纹理,由于纹理在游戏编程中使用非常频繁,而且着色器中对纹理的处理有非常大的扩展性和可操作性,包括各种对纹理图片的高级渲染方法,因此紧接着我们需要了解着色器显示纹理的方法。我们此前已经学习了VBO、VAO和EBO模式,以及着色器的初步知识,以上知识这里都会用到,如果有不了解的可以翻看一下以前对应章节的知识,我们这节主要了解一下着色器显示纹理的方法以及与传统的立即渲染默认显示纹理方法的相同与不同之处,需要注意的一些问题以及对着色器的理解。那我们来看一下着色器是操作并显示纹理的过程。

在这里插入图片描述

3、 纹理与颜色的混合

首先,我们看一下没有添加纹理,只是使用自定义定点颜色的正方形显示的颜色,我们直接在片段着色器中将最终输出颜色变量FragColor设置为输入的顶点颜色,就可以得到一个彩色的正方形。

在这里插入图片描述

我们现在改变一下片段着色器最终显示颜色的内容,使用mix函数进行颜色的线性混合,并可以手动添加线性混合因子的数值。

在这里插入图片描述
我们可以看到,纹理和原本颜色进行了融合,形成了非常自然过渡的颜色效果。

4、 纹理和纹理的融合

既然可以进行颜色和纹理的融合,那肯定也可以进行纹理和纹理的融合,本质上就是对纹理颜色使用mix进行融合。那么,我们首先需要在启用两个纹理单元(GL_TEXTURE0和GL_TEXTURE1),并在各自的纹理单元中绑定不同的纹理,这里我们绑定了texExampleSimpleBox和texExampleSmile两个纹理到各自的纹理单元。然后,通过glUniform1i函数将纹理单元编号传递给着色器,交给着色器处理后续的融合效果。

在这里插入图片描述

5、着色器纹理渲染实例——纹理灰度渲染

我们刚刚介绍了着色器的一些原理和功能实现,现在我们来做一个简单又实用的功能。当我以前玩游戏的时候,当人物角色死亡后,我们就会立即处于灵魂状态,然后我们在灵魂状态下会经过很长一段路途,在此过程中我们看到的世界所有都是灰白色的,就好像只能够看到整个世界的轮廓一样,整个世界都失去了原本的颜色,变成了黑白颜色。当时我在玩游戏的时候就感觉这个功能很不错,让人能明显的感受到灵魂状态与现实美丽世界的区别,那么这个功能要怎么能实现?答案来了现在就可以在着色器中实现,而且是很容易的实现。那么我们现用一个实例来表现一下它的效果。下面是一张彩色的图片纹理。我们先将它用着色器整个的输出到屏幕上。显示的效果如下:

在这里插入图片描述

我们刚刚讲过,我们通过着色器的片段着色器,可以控制整个模型输出的最终颜色。如果我们在模型的片段着色器中不对颜色进行灰度化的处理,那么最终显示出来的就是我们漂亮的世界,拥有各种漂亮的纹理颜色。那么我们现在需要做的就是对各种漂亮的纹理颜色进行灰度化处理。也就是在片段着色器中将输入的颜色,手工转化成灰白颜色,将灰白颜色作为输出变量即可。那么我们来看一下将一个颜色转换成灰白颜色有多么的简单。

彩色图像转化为灰度图像的过程称之为图像灰度化处理。对于灰度图像处理一般有四种方法:平均值法、加权平均值法、最大值、分量法。我们这里采用一种简单,效果又比较柔和的平均值方法,就是将原来输入的颜色RGB分量相加的和除以3,就能简单的将彩色颜色转换成为了灰度颜色。一个公式就搞定了!现在我们来看一下最终的灰度图效果。我们可以看到灰度颜色的效果非常完美。

在这里插入图片描述

当然我们现在实例中只有一个模型的着色体。当我们后期建的模型越来越多,我们需要灵魂状态的灰度界面时,我们就可以通过Uniform变量传递着色器一个是否进行灰白显示的标志,这样我们游戏里头所有的的模型都变成了灰白颜色,达到了我们所需要的灵魂状态灰度效果。等我们后期整个三维世界创建差不多的时候,我们可以试验一下它的效果。

6、着色器纹理坐标处理

有一点要注意,顶点着色器中处理的大多都是我们用户输入的顶点信息。就比如说你在自定义正方形数组时,共传递了4个顶点数据。那顶点着色器中我们主要的就是对这4个顶点的数据进行编程,我们可以对顶点的数据直接进行操作。而片段着色器的操作对象就比顶点着色器要多得多,片段着色器中可以控制整个正方形的颜色,不仅仅是4个顶点的颜色,我们可以对整个正方形的颜色进行处理,就比如说我们在下面这个例子中,将整个纹理坐标进行划分成3份,第1部分显示纹理原本的颜色,中间部分显示出纹理和原本顶点颜色的融合结果,最后一部分我们显示经过灰度化处理的纹理颜色。通过这个示例,我们明显可以感觉到,片段着色器对整个纹理输出的操作方式。

在这里插入图片描述

7、总结

当了解到这些知识了以后,我们对着色器慢慢的有了更深刻的认识,学习就是这样,不断的接触新事物,不断的总结反思,就会有新的收获。总之,使用GLSL渲染纹理是一种非常有用的技术,可以实现高效的图形处理和渲染,并且可以根据具体的应用场景和需求进行更复杂的渲染操作。

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

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

相关文章

前端技术月刊-2024.11

本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分,React Native 0.76 版本发布,带来全新架构;Deno 2.0 和 Node.js 23 版本更新,推动 JavaScript 生态进步;Flutter 团队规模缩减,引发社区关注…

定制化视频生成新模范!零样本主体驱动,精确运动控制!复旦阿里等发布DreamVideo-2

文章链接:https://arxiv.org/pdf/2410.13830 项目链接:https://dreamvideo2.github.io/ 亮点直击 DreamVideo-2,首个无需微调,同时支持主体定制和运动控制的零样本视频定制框架,能够通过设计的参考注意力学习主体外观&…

mysql--多表查询

一、联合查询 作用:合并结果集就是把两个select语句的查询结果合并到一起! 合并结果集有两种方式: UNION:合并并去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2; UNION ALL&a…

PHP图书馆借阅管理系统-计算机毕业设计源码01649

基于HTML5CSS的图书馆借阅管理系统的设计与实现 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。本…

VMware系统镜像推荐网站

今天准备找一个Mac系统的镜像,在网上搜大部分都是广告,有的还做的很隐蔽,不点进去都无法确定,非常麻烦,不如多花点时间自己整理一个使用的网站。 如果有更优推荐,请在评论中说明,我会及时更新并…

vscode通过.vscode/launch.json 内置php服务启动thinkphp 应用后无法加载路由解决方法

我们在使用vscode的 .vscode/launch.json Launch built-in server and debug 启动thinkphp应用后默认是未加载thinkphp的路由文件的, 这个就导致了,某些thinkphp的一些url路由无法访问的情况, 如http://0.0.0.0:8000/api/auth.admin/info这…

中国90米土壤渗流因子Fsic数据

Fsic(土壤渗流因子):土壤渗流因子的计算是根据美国农业部(USDA)土壤质地分类, 进行分类、赋值并归一化,得到土壤渗流因子Fsic的值。将13种土壤质地类型分别在0-1之间均等赋值得到。其中Fsic值越高,代表土壤渗水能力越强,Fsic值域范…

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测

【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测 目录 文章目录 【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要数据与结论)主要参考工作后续优…

【Linux】centos7安装配置DHCP、FTP服务

文章目录 一、DHCP服务介绍1、DHCP服务器2、DHCP客户机3、工作流程 二、安装配置DHCP1、查询是否安装DHCP软件包2、安装3、配置DHCP4、修改配置信息5、重启 二、FTP服务1、安装并启动VSFTP服务2、安装vsftp客户端 一、DHCP服务介绍 DHCP服务主要功能是动态分配IP地址&#xff…

HTML 基础标签——链接标签 <a> 和 <iframe>

文章目录 1. `<a>` 标签属性详细说明示例2. `<iframe>` 标签属性详细说明示例注意事项总结链接标签在HTML中是实现网页导航的重要工具,允许用户从一个页面跳转到另一个页面或嵌入外部内容。主要的链接标签包括 <a> 标签和<iframe> 标签。本文将深入探…

Java日志脱敏(二)——fastjson Filter + 注解 + 工具类实现

背景简介 日志脱敏 是常见的安全需求&#xff0c;最近公司也需要将这一块内容进行推进。看了一圈网上的案例&#xff0c;很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的&#xff0c;而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客…

Launcher3 去掉桌面搜索索框

文章目录 需求实现需求说明 参考资料修改文件实现思路首页显示的搜索框去除应用列表中的搜索框去除解决方案代码跟踪代码扩展 需求 Launcher3 去掉搜桌面索框 实现需求说明 每个平台平台源码有区别&#xff0c;比如&#xff1a;MTK、高通、展讯、RK、谷歌…单个平台下 不同A…

红队-shodan搜索引擎篇

如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.shodan原理与功能的介绍 Shodan Search Engine 它是专门搜网络设备的,只要联网的,只要有IP地址的都可以称为网络设备 1.shodan&#x…

初始JavaEE篇——多线程(5):生产者-消费者模型、阻塞队列

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 文章目录 阻塞队列生产者—消费者模型生产者—消费者模型的优势&#xff1a;生产者—消费者模型的劣势&#xff1a; Java标准库中的阻…

基于Multisim汽车尾灯电路左转右转刹车检查功能电路(含仿真和报告)

【全套资料.zip】汽车尾灯电路左转右转刹车检查功能电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 电路有按键控制&#xff0c;分别对应左转&#xff0c;右转&#xff0c;刹车&a…

实现GUI界面中的logo图片的编码与隐藏

实现GUI界面中的logo图片的编码与隐藏 一、问题描述二、解决办法 一、问题描述 利用PyQt5编写的GUI界面&#xff0c;有时候需要我们添加自定义的图片来作为UI界面的logo&#xff0c;在源码使用时&#xff0c;logo的形式一般不影响使用&#xff0c;但是当我们需要将软件进行打包…

LabVIEW离心泵性能优化测试系统

开发了一套基于LabVIEW平台开发的离心泵性能优化测试系统。系统集成了数据采集、流量控制、数据存储、报表生成等功能&#xff0c;提供了低成本、便捷操作的解决方案&#xff0c;适用于工业场景中对离心泵性能的精确测评。 项目背景 随着工业化进程的加速&#xff0c;离心泵在…

论文阅读(三十二):EGNet: Edge Guidance Network for Salient Object Detection

文章目录 1.Introduction2.Related Works3.Salient Edge Guidance Network3.1Complementary information modeling3.1.1Progressive salient object features extraction3.1.2Non-local salient edge features extraction 3.2One-to-one guidance module 4.Experiments4.1Imple…

三大细分领域入选,九州未来再登2024边缘计算产业图谱

10月31日&#xff0c;经过数月的深入调研和专家严格评估&#xff0c;边缘计算社区正式发布《2024边缘计算产业图谱》。该图谱全面收录中国边缘计算领域最具活力的100家企业、科研机构、高校及标准组织等单位&#xff0c;深入梳理产业链上下游发展情况&#xff0c;精准研判边缘计…

【HarmonyOS】鸿蒙系统

文章目录 前言一、鸿蒙OS概述1. 定义与特性2. 核心技术理念3. 技术架构设计1. 应用层2. 框架层3. 系统服务层4. 内核层 二、分布式架构分布式架构的核心理念分布式能力的实现关键技术 三、 总结 前言 鸿蒙OS是由华为推出的一款开源操作系统&#xff0c;旨在满足智能终端设备的…