怎么绘制属于自己网格信息

本文详细介绍了Unity中Mesh的绘制过程,包括顶点坐标、UV贴图和三角形索引等核心信息的设置方法,并提供了具体的C#代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unity里面一个物体要渲染出来 需要两个组件 一个是MeshFilter 一个是MeshRender

一个mesh 想要绘制出来需要设置的信息:

//这两个是必须的
vertices : 定点坐标
tangents: 三角形坐标索引

//可有可无的
uv: uv贴图
tangents : 法线贴图 左下角是 0,0点 最大是 1,1 点

tangents:
在unity中是顺时针存储,如果逆时针的话 只能在物体内部看见

这里写图片描述

//绘制过程:
1,绘制顶点坐标
2,根据顶点坐标设置三角形3个顶点坐标
3,设置UV
4,设置发现
//后面两部并不是都需要

    private Vector3[] vertices;

    public int xSize = 10;
    public int ySize = 5;

    private Mesh mesh;

    void Awake()
    {
        Generate();
    }

    private void Generate()
    {

        this.GetComponent<MeshFilter>().mesh = mesh = new Mesh();

        vertices = new Vector3[(xSize + 1) * (ySize + 1)];
        //法线信息
        Vector4[] tangents = new Vector4[vertices.Length];
        Vector4 tangent = new Vector4(1f, 0f, 0f, -1f);

        Vector2[] uv = new Vector2[vertices.Length]; //控制UV贴图
        for (int i = 0, y = 0; y <= ySize; y++)
        {
            for (int x = 0; x <= xSize; x++, i++)
            {
                vertices[i] = new Vector3(x + 1, y + 1);
                //yield return wait;
                uv[i] = new Vector2(x/(float)xSize, y/(float) ySize);
                tangents[i] = tangent;
            }
        }

        mesh.vertices = vertices;
        mesh.uv = uv;
        mesh.tangents = tangents;

        ////设置三角形定点信息
        //int[] triangles = new int[6];
        //triangles[0] = 0;
        //triangles[1] = xSize + 1;
        //triangles[2] = 1;

        ////绘制第二个三角形
        //triangles[3] = xSize +1;
        //triangles[4] = xSize + 2;
        //triangles[5] = 1;

        //mesh.triangles = triangles;
        int[] triangles = new int[xSize * ySize * 6];// 一个方形两个三角形  6个定点信息

        for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++)
        {
            for (int x = 0; x < xSize; x++, ti += 6, vi++)
            {
                triangles[ti] = vi;
                triangles[ti + 3] = triangles[ti + 2] = vi + 1;
                triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;
                triangles[ti + 5] = vi + xSize + 2;
            }
        }

        mesh.triangles = triangles;
        mesh.RecalculateNormals();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值