IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UI雷达图材质实现思路 -> 正文阅读

[游戏开发]UI雷达图材质实现思路

首先多边形雷达图的效果,肯定还是用动态mesh的方法比较好,数值变化的饿时候改变顶点位置。但是如果想要一个完全用材质实现的效果的话也可以做到,但是性价比不高,但也可以尝试下。以下以一个六边形为例

首先既然值的变化要控制点的位置变化,那么肯定首先需要画出多边形的形状遮罩区域,这里的做法是将六边形拆成六个三角分别来画。那么首先一步的操作就是要画出三角,那么如何根据输入的顶点坐标来画出一个三角区域呢。这里就需要用到二维向量的叉乘,但是需要注意的一点是二维向量的叉乘也是有方向性的,可以看成Z轴为0的三维叉乘,所以向量叉乘的顺序就很重要。

所以比如输入A B俩点连接成的底边的三角形,向量AP和AB的叉乘的模就是P到AB的垂线长乘AB长的值,这样的结果就可以理解为像素到AB直线的距离。那么对三角形的每一条边都这么做再求min,中间的区域就可以通过判断值是否大于0来提取出来了。

但如之前所说,二维向量的叉乘是有方向性的,我们想要的是边到三角形内部值的变化是0-正值,但如果A B顶点位置一对换,叉乘顺序一反,那边到三角形内值的变化就变成负值了。所以还需要一步来将叉乘顺序不对时的结果反向,这里直接给结论,设六边形的中心坐标为(0.5,0.5) 那么如上图的三角形的上面的顶点是六边形中心的话。AP叉乘AB就反向了,此时需要用中心点到B的向量叉乘BA的sign值来相乘,数学就是这么神奇。。

(此时向量交点为A,中心点->另一端点B的向量叉乘另一点到A点的向量BA的sign值判断)

这样就可以获取到每一块小三角的区域遮罩了

对于三角内部形状的操作,可以直接使用叉乘的结果,也可以通过2D SDF计算获得,我的实现中用到了2D线段SDF来做形状

2D平面基本图形SDF推导01 - 知乎

?

?

一些过程中的形状结果,三角形在下方,没加遮罩。有点坑的是由于用了frac,那么要用smoothstep去除形状的边缘锯齿的话,还得1-frac相乘来柔化俩侧的边缘,这部分计算还省不掉。。

接下来一步是画线框,那么想的肯定是通过以三角中心缩小三角来得到线框区域,这里又有一个需要注意的点,直接用上面叉乘min的结果来step我们会发现三角形不是沿中心所放的,如果需要向中心点缩放,那么需要除掉底边的边长。

?这时看又有问题,因为中心点作为顶点的边是俩三角形叠在一起的,所以如果要保证线框宽度一致,这些中心点作为顶点的边还要提出来单独处理。我这里中心点相关的边除的底边长要减半,可以保证描边宽度一致,但是缩放不是沿着三角中心的。视觉上也看不出啥问题其实。。

最后一步就是六边形整个外轮廓的锯齿怎么消的问题。我首先想到的是都有远离三角中心点的那条边的渐变过度了,那就直接用它来做,用那条边的SDF也行。但是这些做法有个问题,就是这种在凸多边形的时候是没问题的,但是变成凹多边形的时候就不行了。。

?

需要取遮罩的绝对值来算,并且这个交叉部分的断线还消不掉。。

所以目前就是改成每一个三角单独提出来算再混合,效果是能做对但是也增加了许多计算量。

shader不美观就不贴了.

最终效果:

?

?have fun

?

?

?

?

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:56:40  更:2021-11-09 19:57:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:28:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码