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

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();
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一个广泛使用的WebGL开源框架,可将地理空间数据以三维形式展现在网页上。在Cesium中绘制三维网格是一个常见的需求,通常用于建筑、地形、模拟等领域,因为这些领域需要非常精确的空间数据和三维场景的可视化呈现。 首先,我们需要了解Cesium中网格的概念。在三维图形中,网格可以看作是一个由许多小面片组成的三角网格,这些小面片的共同作用形成了整个三维网格。在Cesium中,我们通过使用Primitive对象来创建一个网格。Primitive是一个抽象类,通常使用它的子类来创建不同类型的网格。 要绘制三维网格,我们需要明确三个核心要素:顶点、连接方式和纹理。顶点是网格中的一个节点,通常表示为一个二维或三维向量。连接方式指定了如何连接各个顶点以形成面。常见的连接方式有三角形连接和方块连接。纹理指的是将图像贴到网格上的过程,这样网格就能呈现出想要的颜色、图案或质感。 在Cesium中,我们可以使用Geometry对象来定义顶点和连接方式,使用Material对象来定义纹理。Geometry对象是Cesium中的一个抽象类,通过它的子类如RectangleGeometry、BoxGeometry等可以创建不同类型的几何体。Material对象用于定义如何渲染几何体,包括颜色、透明度、反射等。 可以通过以下步骤来绘制三维网格: 1. 创建一个Geometry对象,确定网格的顶点和连接方式 2. 创建一个Material对象,确定网格的纹理 3. 将Geometry和Material对象传入一个Primitive对象中,并添加到场景中 如果你希望通过模型导入的方式来绘制网格,可以使用Cesium中的glTF格式。glTF是一种用于三维模型的标准格式,它可以将三维模型数据以JSON格式存储并实现高效的数据压缩和传输。Cesium可以通过glTF格式来实现模型导入,并且提供了更为复杂的网格绘制功能与更具复杂的动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值