UGUI源码(五)VertexHelper

UGUI源码(五)VertexHelper

VertexHelper.cs

UGUI提供了我们自己构建顶点、三角形的类,那就是VertexHelper类。通过这个类,我们可以创建顶点,构成三角形,填充到一张mesh上,然后用MeshRenderer渲染到屏幕上,实际上我们可以直接操作Mesh类添加顶点、三角形等操作,这里的vertexHelper只是UGUI与Mesh之间的一座桥梁。

之前的文章中UGUI源码(二)Graphic,在OnPopulateMesh()函数中使用,保存了生成Mesh的基本信息,并非Mesh对象,最后通过这些基本信息就可以生成Mesh网格了。Graphic中有个静态对象s_VertexHelper保存每次生成的网格信息,使用完后会立即清理掉等待下个Graphic对象使用。

//部分源码
public class VertexHelper : IDisposable
{
    private List<Vector3> m_Positions = ListPool<Vector3>.Get();//顶点位置
    private List<Color32> m_Colors = ListPool<Color32>.Get();//颜色
    private List<Vector2> m_Uv0S = ListPool<Vector2>.Get();//UV
    private List<Vector2> m_Uv1S = ListPool<Vector2>.Get();
    private List<Vector2> m_Uv2S = ListPool<Vector2>.Get();
    private List<Vector2> m_Uv3S = ListPool<Vector2>.Get();
    private List<Vector3> m_Normals = ListPool<Vector3>.Get();//法线
    private List<Vector4> m_Tangents = ListPool<Vector4>.Get();//切线
    private List<int> m_Indices = ListPool<int>.Get();//三角面的索引

	//添加一组顶点数据(位置、颜色、UV、法切线)
    public void AddVert(Vector3 position, Color32 color, Vector2 uv0, Vector2 uv1, Vector3 normal, Vector4 tangent)
    {
        m_Positions.Add(position);
        m_Colors.Add(color);
        m_Uv0S.Add(uv0);
        m_Uv1S.Add(uv1);
        m_Uv2S.Add(Vector2.zero);
        m_Uv3S.Add(Vector2.zero);
        m_Normals.Add(normal);
        m_Tangents.Add(tangent);
    }

	//添加三角面的索引,参数为绘制一个三角面的三个顶点
    public void AddTriangle(int idx0, int idx1, int idx2)
    {
        m_Indices.Add(idx0);
        m_Indices.Add(idx1);
        m_Indices.Add(idx2);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值