| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 【Shader】图集UV错乱问题 -> 正文阅读 |
|
[游戏开发]【Shader】图集UV错乱问题 |
问题发生原因: 图片uv本身是[0,1]的,但是到了图集里,就肯定不是[0,1] 除非图集只有一个图片 而且图片覆盖整个图集区域,即图片大小=图集大小。 解决思路: 假设图集图片的uv变为[x,y],那么推导回[0,1]范围的,就需要知道图集图片的uv宽度和高度. uv宽度=uvMaxX - uvMinX uv高度=uvMaxY - uvMinY 我们如何获取到图集图片的uvMaxX、uvMinX、uvMaxY、uvMinY呢?有一个API可以获取。 Vector4 outUV = DataUtility.GetOuterUV(image.sprite); 可注意到传入的是一个图集图片Sprite对象,返回了一个Vector4(uvMinX, uvMinY, uvMaxX, uvMaxY) 求出uv宽度和uv高度之后,就是简单地将图集图片uv[x,y]映射回[0,1] x' = (x - uvMinX) / uv宽度, y' = (y - uvMinY) / uv高度 [x', y'] 在[0,1]范围内,这样我们就恢复了UV在[0,1] 就可以正常地像没有在图集里使用图片去做UV动画 或 做UV的一些处理了,等处理完成后,在使用UV采样图片Texture前,需要将UV恢复回去! 恢复操作即利用[x',y']反推出[x,y] x = uvMinX + uv宽度 * x', y = uvMinY + uv高度 * y' 代码:
其中,atlasSpriteRectUV是DataUtility.GetOuterUV获取的outUV(Vector4)。上述2个方法不难看出第一个是转[0,1] 将图集图片uv映射回[0,1]范围,等使用uv参与的运算结束后,使用第二个方法reverse回图集图片uv范围,然后再去使用这个图集图片uv采样图片。传入的float2 uv就是图片UV 上述outUV是获取UGUI Image图片的,SpriteRenderer的Sprite也是同理。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/27 20:19:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |