Unity中简单喷涂功能的实现纪要

本文介绍如何在Unity中实现模型表面的喷涂功能,通过摄像机视角计算矩阵数据,转换为各子物体相对矩阵,并在shader中进行uv坐标变换,实现图片的缩放、移动和旋转。详细阐述了计算过程和shader中的关键代码。
摘要由CSDN通过智能技术生成

目标

在模型上实现喷涂功能,喷涂编辑时以摄像机视野为中心将图片喷绘到模型上,图片可进行缩放、移动、翻转等操作,喷涂完成后图片随模型的移动而动,随各子部件的旋转而转动。

思路

结合项目的实际情况,喷绘时模型是保持不动的,摄像机的x、y轴随手势转动,由此实现步骤如下:

  1. 通过固定参数计算出喷绘时摄像机相对于模型根物体的矩阵数据;
  2. 将第1步的矩阵转换为相对于各接受喷绘的子物体的矩阵后传入shader;
  3. shader中使用矩阵计算模型顶点在摄像机(虚拟)空间的位置;
  4. 将位置数据转换为uv;
  5. 对uv根据传入的参数进行缩放、旋转、平移等操作;

实现

一、通过固定参数计算出喷绘时摄像机相对于模型根物体的矩阵数据

在这一步的实现中,主要是对矩阵要有所理解,以前网上学习矩阵知识,多是基础理论的讲解、推导等,鲜有结合实际的说明,在这里总算是对矩阵有了进一步的理解,记录在这里,供参考。

所谓矩阵,其实就是包含了位置、旋转、缩放参数的数据,具体的数据含义这里不讲了,网上很多。具体到Unity中,比如一个子物体相对于世界的LocalPosition是(1,1,1),LocalEulerAngles是(0,0,0),LocalScale是(1,1,1),那么通过矩阵的SetTRS方法得到的结果就是该子物体的LocalToWorldMatrix,这个值的逆inverse就是该子物体的WorldToLocalMatrix,也就是世界

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值