Unity模拟毛笔字效果

前言

在unity里模拟毛笔字效果,在我看来这个应该和压力、面积、速度相关。但受限于硬件条件,故使用算法去实现。

一、之前效果展示

在这里插入图片描述
甲方表示不满意,没有笔锋效果,故需要完善修改,第一想到的是直接百度,居然还有相关的资料,这里附链接。
https://blog.csdn.net/May11st/article/details/80746092

二、完善修改

使用这个方法有个明显的问题,就是横向效果可以但竖直笔画字体的粗细明显不对,效果也不好。
所以就想到了在笔画不同走向使用不同的笔触来改善这个问题。
以下是四种走向改变笔触得到的效果。甚至还尝试过八种笔触,但变化太多反而效果更差。
在这里插入图片描述
乍一看这个单笔画的效果其实也还不错,但是!!!!
当写连笔时,走向变化时就会出现明显的不和谐连接点,甚至在停笔处可能会出现错误笔触!!!!
在这里插入图片描述
1.停笔出现其他笔触
2.笔触变更接点不平滑
看到这个两个问题,很快就蹦出了修改方案,使用单一笔触,让笔触随着走向做旋转。目前就到这种情况,还在修改中…

继续

GL.TexCoord2(RotateRound(Vector3.zero).x, RotateRound(Vector3.zero).y); 
GL.Vertex3(left / Screen.width, top / Screen.height, 0);
GL.TexCoord2(RotateRound(new Vector3(1,0,0)).x, RotateRound(new Vector3(1, 0, 0)).y); 
GL.Vertex3(right / Screen.width, top / Screen.height, 0);
GL.TexCoord2(RotateRound(new Vector3(1, 1, 0)).x, RotateRound(new Vector3(1, 1, 0)).y); 
GL.Vertex3(right / Screen.width, bottom / Screen.height, 0);
GL.TexCoord2(RotateRound(new Vector3(0, 1, 0)).x, RotateRound(new Vector3(0, 1, 0)).y); 
GL.Vertex3(left / Screen.width, bottom / Screen.height, 0);

public Vector3 RotateRound(Vector3 position)
    {
    
    
        Vector3 point = Quaternion.AngleAxis(angle, new Vector3(0,0,-1)) * (position - new Vector3(0.5f,0.5f,0));
        Vector3 resultVec3 = new Vector3(0.5f, 0.5f, 0) + point;
        return resultVec3;
    }

以上代码实现笔触跟随笔画走向旋转,这里笔触一定要使用正方形。
在这里插入图片描述
大概是解决走向变化连接点不平滑的问题,但是任存在停笔时小抖动出现错误笔触的情况…
在触屏上测试了下最终的效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Bug1997/article/details/125273143