【Shader特效7】砖头墙壁纹理和排球纹理片元着色器实现

LearnGL - 12 - GLSL include - GL_ARB_shading_language_include (Extensions扩展) - 各种踩坑 文章目录GL_ARB_shading_language_include 不支持?留意使用的显卡是否集成显卡设置使用独立显卡References 在 GLSL 编写 shader 时,发现不能直接使用 #include"file_name.xxx" 写 shader 起来相当麻烦 然后我还想着去添加一下 GLSL Include 的功能 GL_ARB_shading_language_include 不支持? 结果发现 OpenGL 4.5 竟然不支持 GL_ARB_shading_language_incl 阅读详情

砖头墙壁纹理片元着色器实现(Shader特效7)

最近在研究一个使用片元着色器完成墙壁纹理和排球纹理的例子,在这里进行总结一些算法和开发过程。

作者:尹豆(憨豆酒),联系我yindou97@163.com,熟悉图形学,图像处理领域,本章代码: https://github.com/douysu/computer-graphics-notes

参考内容:
  • 《OpenGL ES 3.X 游戏开发 下卷》

墙壁纹理运行效果

这里写图片描述

排球纹理运行效果

这里写图片描述

墙壁纹理基本原理

这里写图片描述
通过以上的图片可以这样计算
1、首先通过每一行的高度计算出每一个顶点的所属行。奇数行与偶数行的砖块不能够重叠,否则看不出效果,所以奇数行相对偶数行有一个偏移量,这也就是需要计算行号的目的了。
2、将一行分解成图中的1,2,3部分分别计算即可。

排球纹理基本原理

排球纹理原理就不再多讲了,与墙壁纹理类似,将经度划分成8个区域,给定不用颜色,将纬度划分成3个区域,两极为白色。

墙壁纹理代码部分

commonTexLight.frag

#version 400
#extension GL_ARB_separate_shader_objects : enable//开启separate_shader_objects
#extension GL_ARB_shading_language_420pack : enable//开启shading_language_420pack
layout (location = 0) in vec3 vposition;//顶点着色器传入的顶点位置
layout (location = 1) in vec2 mcLongLat;//顶点着色器传入的顶点位置(经度,纬度)(偏航角,俯仰角)
layout (location = 0) out vec4 outColor;//输出到渲染管线的片元颜色值
void main(){//主方法
   vec3 bColor=vec3(0.678,0.231,0.129);//砖块的颜色
   vec3 mColor=vec3(0.763,0.657,0.614);//水泥的颜色
   vec3 color;//片元的最终颜色
   //计算当前位于奇数还是偶数行(这里的12是指每一行的高度)求得的结果为0或者1
   int row=int(mod((mcLongLat.y+90.0)/12.0,2.0));
   //计算当前片元是否在此行区域1中的辅助变量,结果为0~11将墙壁的每一行分段化
   float ny=mod(mcLongLat.y+90.0,12.0);
   //每行的砖块偏移值,奇数行偏移半个砖块
   float oeoffset=0.0;
   //当前片元是否在此行区域3中的辅助变量
   float nx;
   if(ny>10.0){//图中的1部分
       color=mColor;//采用水泥色着色
   }else{//图中的2,3部分
   if(row==1){//若为奇数行则偏移半个砖块
        oeoffset=11.0;
   }
   //计算当前片元是否在此行区域3中的辅助变量
   nx=mod(mcLongLat.x+oeoffset,22.0);
   if(nx>20.0){//图中的2部分
       color=mColor;
   }else{//图中的3部分
    color=bColor;//采用砖块色着色
    }
   } //将片元的最终颜色传递进渲染管线
     outColor=vec4(color,0);
}

这里需要注意,传入的vary有mcLongLat,这是一个vec2类型的变量,第一个值为纬度,第二个值为经度(也可以理解为第一个为偏航角,第二个值为俯仰角)
纬度和经度的知识可以看:http://blog.youkuaiyun.com/modestbean/article/details/79185457
偏航角和俯仰角的知识可以看:http://blog.youkuaiyun.com/modestbean/article/details/79135769

排球纹理代码部分

#version 400
#extension GL_ARB_separate_shader_objects : enable//开启separate_shader_objects
#extension GL_ARB_shading_language_420pack : enable//开启shading_language_420pack
layout (location = 0) in vec3 vposition;//顶点着色器传入的顶点位置
layout (location = 1) in vec2 mcLongLat;//顶点着色器传入的顶点位置(偏航角,仰角)
layout (location = 0) out vec4 outColor;//输出到渲染管线的片元颜色值
void main(){//主方法
    vec3 color;
      if(abs(mcLongLat.y)>75.0){
      	  color = vec3(1.0,1.0,1.0);//两边是白色
      }else{
         int colorNum = int(mcLongLat.x/45.0);//颜色号
         if(colorNum == 0){
         	color = vec3(1.0,0.0,0.0);//0号颜色
         }else if(colorNum == 1){
         	color = vec3(0.0,1.0,0.0);//1号颜色
         }else if(colorNum == 2){
         	color = vec3(0.0,0.0,1.0);//2号颜色
         }else if(colorNum == 3){
         	color = vec3(1.0,1.0,0.0);//3号颜色
         }else if(colorNum == 4){
         	color = vec3(1.0,0.0,1.0);//4号颜色
         }else if(colorNum == 5){
         	color = vec3(0.0,1.0,1.0);//5号颜色
         }else if(colorNum == 6){
         	color = vec3(0.3,0.4,0.7);//6号颜色
         }else if(colorNum == 7){
         	color = vec3(0.3,0.7,0.2);//7号颜色
         }
      }
     outColor = vec4(color,1.0);//将颜色扩充为带Alpha通道的vec4类型
}

threeJs着色器 就像活字印刷,你的程序就像一个 function(函数),输入位置信息,输出颜色信息,当它编译完之后会以相当快的速度运行。然后,GPU会按照着色器的指示处理所有的这些数据,接着几何体便出现在渲染中。的渲染流程中,顶点着色器代码先执行处理顶点,得到一系列片元,然后再执行片元着色器代码处理片元。将按照顶点着色器中的指示处理所有这些信息,以便将顶点投影到2D空间,该空间将成为我们的渲染。它设置渲染到屏幕的每个单独的“片元”(像素)的颜色。的着色器代码分为顶点着色器代码和片元着色器代码两部分,顶点着色器代码会在。 阅读详情

相关推荐

【OpenGL原理】顶点着色器、片元着色器、几何着色器

我们除了对GLSL语言本身的理解,对真正的宏观管线认知是越早越好的事情。理解着色器的能力,以及使用局限性能够迫使我们修正设计思路。也许我们胸中有无限多的想象,一旦面对着色器的无能为力,精妙想向也就灰飞叶湮灭。有时需要引进其它的环节,但又不能确定是否用着色器本身就能完成?种种困局需要我们扎实理解渲染管线和着色器原理,然后才能决定采取何种技术路线。

gongdiwudu的专栏 4448

Vulkan着色器的GLSL创建、编译、加载、创建流程

Vulkan没有指定官方的着色器编程语言,而是采用SPIR-V二进制中间格式进行表示。开发人员一般需要基于某种着色器编程语言开发着色器,之后再编译为SPIR-V格式。可以选用GLSL着色器编程语言进行开发。 大型游戏场景中,一般预先将着色器编译为SPIR-V格式保存在文件中,程序运行时直接加载SPIR-V数据,提高效率。 着色器的预编译和调用过程如面流程所示: ...

小小顺利的博客 4706

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南)

本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。

weixin_26821003的博客 274

Vulkan_Shader—环境映射天空盒

环境映射 我们现在将整个环境映射到了一个纹理对象上了,能利用这个信息的不仅仅只有天空盒。通过使用环境的立方体贴图,我们可以给物体反射和折射的属性。这样使用环境立方体贴图的技术叫做环境映射(Environment Mapping),其中最流行的两个是反射(Reflection)和折射(Refraction)。 在介绍这两种之前,我们先把,天空盒的顶点和片元着色器贴出来,很常规: 顶点着色器: #ve...

qq_35312463的博客 1191

虚拟机Ubuntu连接USRP

笔记本通过网线连接USRP。

xiaozir的博客 2305

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

GLSL全程 以及类型解释

GLSL全程为OpenGL着色语言(OpenGL Shading Language),是一种类似C语言的编程语言,专门用于编写图形处理器(GPU)的着色器程序。它主要用于OpenGL和Vulkan这样的图形API中进行图形渲染。

weixin_44609842的博客 953

Visual Studio 2022 社区版安装指南:从下载到配置的完整流程

本文详细介绍了Visual Studio 2022社区版的完整安装与配置流程,包括系统要求检查、官方下载步骤、工作负载选择、安装位置配置等关键环节。作为微软推出的免费集成开发环境,VS2022社区版支持多种编程语言,适合个人开发者和小型团队使用。文章还提供了常见问题解决和性能优化技巧,帮助用户高效完成开发环境搭建。

weixin_28829339的博客 873

Unity Shader学习2:基础纹理

为了增强记忆,每次写新的shader我都是新建后删除原有代码重头开始手打的,大多数时候写重复的部分更像是默写,这也导致了写到没完全理解的语句时会出现记忆不清的情况。这次就把Tags里面的“LightMode”记成了“LightModel”,导致改变光源方向的时候不会反映到物体的效果上。像平时看代码一样,多去看看不熟悉的内置函数,关注输入和输出的数据类型,这次因为不知道UnityObjectToWorldNormal的输入参数只能是float3而我传了个float4进去而耽误了好一会儿功夫。

Little_Double_E的博客 1110

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3940

【OTFS与信号处理:论文阅读4】OTFS时延多普勒域嵌入导频辅助信道估计(已更新)

【OTFS与信号处理:论文阅读】Embedded Pilot-Aided Channel Estimation for OTFS in Delay–Doppler Channel(快来看看OTFS嵌入式导频设计的经典之作!!!)

Cuby的博客 5335

UnityShader学习笔记——基础纹理

1.纹理就是图片或者图片集,我们要做的就是从这些纹理中取颜色,即纹理采样2.纹理坐标(uv坐标):相当于将模型平铺成一张正方形图片,每一个顶点都有自己的位置,而且uv坐标的的横轴和纵轴是被归一化过的,在0~1的范围内3.记录了顶点的uv坐标,并将其传入片元着色器之后,其会被转为片元(像素)的uv坐标(中间的转换靠的是插值计算),这个uv坐标可以在纹理中采集对应位置(像素)的颜色。存储了模型表面的每个点的法线方向存储规则:图片的rgb值分别存储法线的xyz分量,w用于存储其他信息。

2301_80342725的博客 1206

补丁1.0:使用Eviews做ADF检验

补丁1.0:使用Eviews做ADF检验

Jet4505的博客 1961

Shader 能量法球特效

RoadLun原创,转载请声明 ~~~~~~~~~~~~······ ~~~~~多图预警~~~~~~~~~~~~~~~~~~~~~~~~~· 效果: Gif不清楚,先看一张静态图 噪波律动法球: 流动法球: 旋转法球: 实现: 1.上诉所有效果均为在片段函数/着色函数中改变UV的映射方式实现,首先需要新建一个球体,接下来的效果...

GJQI12的专栏 856

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5381

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Vulkan_Shader—几何着色器之法线可视化

几何着色器 我们大部分情况下仅使用顶点着色器(vertex shader)和片元着色器(fragment shader),而实际上vulkan还提供了一个可选的几何着色器(geometry shader)。几何着色器位于顶点和片元着色器之间,如果没有使用时,则顶点着色器输出到片元着色器,在使用几何着色器后,顶点着色器输出组成一个基础图元的顶点信息到几何着色器,经过几何着色器处理后,再输出到片元着色...

qq_35312463的博客 1411

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

渲染管道(3)光栅阶段四“片元着色器”

1. 片段着色器(Fragment Shader)/像素着色器(Pixel Shader) DirextX称为像素着色器(Pixel Shader) 用来决定屏幕上像素的最终颜色。为每个片元计算颜色,包括光照计算以及阴影处理等高级效果。如何计算由开发者配置,比如通过三角形重心坐标插值计算颜色值,计算阴影,或者直接用纹理覆盖。 可编程,可选。 片元经过一系列的测试(深度测试,透明度测试等)才有可能被选上而转变为像素,这也是将之称为预备像素的原因。如果一个片元被选定作为一个像素,经过一系列的变换,最终将转变

thefist的专栏 1873

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【OpenGL学习笔记②】——OpenGL基础【渲染管线 顶点着色器 片元着色器 VAO VBO 万字总结】

关键字:OpenGL、顶点着色器、片元着色器(或片段着色器)、着色器程序、链接顶点属性、顶点缓冲对象(VBO)、顶点数组对象(VAO) 、绘制三角形。

Wang_Dou_Dou_的博客 2万+

【Unity3D】顶点和片元着色器

固定管线着色器通过命令方式实现光照和贴图等效果,表面着色器通过给 SurfaceOutput 赋值实现光照、贴图和法线贴图等效果,它们都不用关注光照算法是如何实现的,只需要传值就行。 顶点和片段着色器给用户提供了更灵活的用法,但使用也更困难。另外,顶点着色器可以通过控制 MVP 矩阵变换实现对模型位置和姿态的控制。

little_fat_sheep 4111

第五章——开始Unity学习之旅

实际上,这些是CG/HLSL 提供的语义(semantics)。读者可以在微软的关于DirectX的文档().aspx#VS)中找到关于语义的详细说明页面。上面提到的语义绝大部分用于描述标量或矢量类型的变量,例如 fixed2、float、float4、fixed4等。关于何时使用哪种变量类型,我们会在5.7.1节给出一些建议。但需要注意的是,一个语义可以使用的寄存器只能处理4个浮点值(float)。因此,如果我们想要定义矩阵类型,如float3×4、float4×4 等变量就需要使用更多的空间。

qq_63388834的博客 1227

Unity Shader学习之片元着色器

本文详细介绍了Unity Shader中的片元着色器(Fragment Shader)的核心概念、功能实现及应用案例。片元着色器作为渲染管线的关键阶段,负责像素最终颜色的计算,通过纹理采样、光照计算、颜色混合和特效等功能实现丰富的视觉效果。文章深入解析了5个典型案例:灰度化效果基于加权平均计算亮度;漫反射光照模型实现基础明暗;波浪纹理通过噪声扰动创造动画;边缘发光利用视角法线夹角检测轮廓;溶解效果借助噪声纹理控制消失过程。这些案例展示了片元着色器在图像处理、光照模拟、动态效果等方面的强大能力,为开发者提供了

tiankongdeyige的博客 1399

Unity3d Shader篇(三)— 片元半兰伯特着色器解析

片元半兰伯特着色器是一种用于在计算机图形学中模拟物体光照效果的着色器技术。它基于半兰伯特(Half Lambert)模型,用于计算物体在光照条件下的漫反射光照强度。与标准的兰伯特模型相比,片元半兰伯特着色器采用了一种简化的方法来计算漫反射光的强度,使得物体在光照变化时表现出更加柔和的过渡效果。

脚踏实地,实事求是。 2795

什么是片元着色器?

片元着色器(Fragment Shader),又称为像素着色器(Pixel Shader),是图形渲染管线中一个至关重要的高度可编程阶段。它在顶点着色器之后运行,其核心任务是计算并输出屏幕上每个“片元(Fragment)”的最终颜色。简单来说,如果说顶点着色器的工作是确定一个图形应该在屏幕的哪个位置,那么片元着色器的工作就是决定构成这个图形的每一个像素应该是什么颜色。片元着色器是现代实时图形渲染技术的核心,它为开发者提供了对最终图像像素级别颜色的强大控制能力。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 908

Shader学习(三)(片元着色器)

在片元处理的漫反射相较于顶点中处理的漫反射在明暗交接处更加清晰。1、在片元着色器处理漫反射。

qq_43008645的博客 780

初识顶点/片元着色器

顶点/片元着色器的基本结构;模型数据从哪里来;使用属性

i我的丢丢呢的博客 1197

QML BOOK 第九章 Shader Effect

9. Shader Effect 注意 最后一次构建:2014年1月20日下午18:00。 这章的源代码能够在http://qmlbook.org/assets/中找到。 着色器允许我们利用SceneGraph的接口直接调用在强大的GPU上运行的OpenGL来创建渲染效果。着色器使用ShaderEffect与ShaderEffectSource元素来实现。着色器本身的算法使用Ope

cwc1987的专栏 6520
上一篇: 【Shader特效6】膨胀效果顶点着色器的实现
下一篇: 【Shader特效8】着色器滤镜、图像卷积与滤波、数字图像处理
尹豆(douysu)
博客等级 码龄9年 151粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值