首页 > 其他分享 >Unity插件 - MeshEditor(八)模型镜像特效

Unity插件 - MeshEditor(八)模型镜像特效

时间:2022-12-13 14:31:40浏览次数:56  
标签:插件 newVertices 渲染 int newMaterial MeshEditor Unity 顶点 镜像


将静态模型(带MeshFilter)按指定轴向、指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点,所以三角面的渲染顺序要变,面的渲染,在unity中,因为一个三角面是以这个三角面的三个组成顶点的顺时针顺序渲染的,镜像颠倒以后,面的渲染顺序正好相反,模型的面正好全部渲染到相反方向(不过感觉像是一个做双面材质的笨办法),这里将所有三角面保存的顶点信息整体倒置一遍就正好倒置了所有面的渲染方向了。

感觉有点绕,例如,一个面有三个顶点组成,分别是1,2,3,他们是这样分布的:

Unity插件 - MeshEditor(八)模型镜像特效_顺时针

渲染顺序为1,2,3的话,就是渲染的面向屏幕之外的这个面,渲染顺序为1,3,2的话,就是渲染的面向屏幕之内的这个面。


基本情况就是这样了。


接下来是代码:



第一步:


重新生成镜像物的顶点:

/// <summary>
/// 生成镜像顶点
/// </summary>
Vector3[] GenerateVertices(Vector3[] oldVertices)
{
Vector3[] newVertices = oldVertices;
//镜像所有顶点
switch (_MirrorDirection)
{
case MirrorDirection.x:
for (int i = 0; i < newVertices.Length; i++) newVertices[i].x = newVertices[i].x * -1 + _MirrorDistance;
break;
case MirrorDirection.y:
for (int i = 0; i < newVertices.Length; i++) newVertices[i].y = newVertices[i].y * -1 + _MirrorDistance;
break;
case MirrorDirection.z:
for (int i = 0; i < newVertices.Length; i++) newVertices[i].z = newVertices[i].z * -1 + _MirrorDistance;
break;
}

return newVertices;
}



第二步:


重新生成镜像物的三角面

/// <summary>
/// 生成镜像三角面
/// </summary>
int[] GenerateTriangles(int[] oldTriangles)
{
int[] newTriangles = new int[oldTriangles.Length];
//将所有面的顶点渲染顺序颠倒
for (int i = 0; i < newTriangles.Length; i++)
newTriangles[newTriangles.Length - i - 1] = oldTriangles[i];

return newTriangles;
}



第三步:


重新生成镜像物的材质

/// <summary>
/// 生成镜像材质
/// </summary>
Material GenerateMaterial(Material oldMaterial)
{
Material newMaterial = new Material(oldMaterial);
//不透明
if (_MirrorMaterialAlpha >= 1.0f)
{
SetMaterialRenderingMode(newMaterial, RenderingMode.Opaque);
if (newMaterial.HasProperty("_Color"))
{
newMaterial.SetColor("_Color", _MirrorMaterialColor);
}
}
//透明
else
{
SetMaterialRenderingMode(newMaterial, RenderingMode.Fade);
if (newMaterial.HasProperty("_Color"))
{
_MirrorMaterialColor.a = _MirrorMaterialAlpha;
newMaterial.SetColor("_Color", _MirrorMaterialColor);
}
}

return newMaterial;
}


属性面板如下:

Unity插件 - MeshEditor(八)模型镜像特效_unity_02


Mirror direction:镜像轴

Mirror Distance:镜像距离

Mirror Material Alpha:镜像透明度

Mirror Material Color:镜像颜色



效果图如下:


Z轴正反镜像:

Unity插件 - MeshEditor(八)模型镜像特效_unity_03

 

Unity插件 - MeshEditor(八)模型镜像特效_Material_04


Y轴正反镜像:

Unity插件 - MeshEditor(八)模型镜像特效_unity_05

 

Unity插件 - MeshEditor(八)模型镜像特效_Material_06


X轴镜像:

Unity插件 - MeshEditor(八)模型镜像特效_顺时针_07


全方位镜像:

Unity插件 - MeshEditor(八)模型镜像特效_Material_08


在角色脚底镜像之后加一层水面用做倒影其实效果还不错的,当然只能是静态物体。


-----by MeshEditor

标签:插件,newVertices,渲染,int,newMaterial,MeshEditor,Unity,顶点,镜像
From: https://blog.51cto.com/u_15911199/5934061

相关文章

  • 【Unity】 HTFramework框架(三十一)全局设置
    更新日期:2020年3月2日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​全局设置简介​​​​使用全局设置​​​​打开全局设置面板​​......
  • unity使用ugui自制调色面板
    突然想实现一个调色面板,然后开工...首先找找有没有什么接口可调,木有找到,找到一些调用win32实现的本地颜色面板的调用,感觉不科学,反正多平台肯定是搞不定的。既然没找到,还是老......
  • MBR60200PT-ASEMI大电流、低耐压插件肖特基二极管
    编辑:llMBR60200PT-ASEMI大电流、低耐压插件肖特基二极管型号:MBR60200PT品牌:ASEMI封装:TO-247正向电流:60A反向电压:200V引线数量:3芯片个数:2芯片尺寸:150MIL漏电流:10ua恢复时间:5n......
  • MBR60200PT-ASEMI大电流、低耐压插件肖特基二极管
    编辑:llMBR60200PT-ASEMI大电流、低耐压插件肖特基二极管型号:MBR60200PT品牌:ASEMI封装:TO-247正向电流:60A反向电压:200V引线数量:3芯片个数:2芯片尺寸:150MIL漏电流:10u......
  • 谷歌浏览器安装elasticsearch-head插件
    之前在使用es的时候有插入索引和数据的需求但是对于es操作不适太熟悉,然后就用docker安装了一个es-head进行操作,但是用docker安装的es-head有时候不是太好用(问题后续标注)。......
  • PHP开发中提供效率的VSCode插件推荐(值得收藏)
    本篇文章给大家推荐一些VSCode+PHP开发中实用的插件。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。VSCode官网下载地址:https://code.visualstudio.com......
  • 需要改动node_modules,并且别人也可以同步,插件 patch-package
    patch-package转自:https://www.cnblogs.com/lovewhatIlove/p/15724812.html1、简介:有个功能需要修改node_modules里面的代码,就发现patch-package可以立即修改并保留对np......
  • Elasticsearch Head插件使用小结
    作者:崔雄华1ElasticsearchHead是什么ElasticSearchhead就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索......
  • 动画插件
     JS方案 greensockhttps://greensock.com/  CSS方案 animate.csshttps://animate.style/......
  • chorme插件 ,在浏览器上模拟手机,pad 查看网页|前端技术开发必备插件
    网址:​​http://lab.maltewassermann.com/viewport-resizer/​​使用方法:1在chrome浏览器上方右击,显示书签栏2打开插件网址,将<ignore_js_op>蓝色按钮拖放至书签栏,ok了。注......