当前位置: 首页 > article >正文

unity使用mesh 画图(1)

plane 圆 空心椭圆 椭圆

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DrawMeshManager
{
    static DrawMeshManager instance;
    public static DrawMeshManager Instance {
        get {
            if (instance != null)
            {
                return instance;
            }
            else
            {
                instance = new DrawMeshManager();
                return instance;
            }
        }
    }
//面片
    public void DrawMesh()
    {
        Mesh mesh = new Mesh();
        Vector3[] vertices = new Vector3[]
        {
            new Vector3(0, 0, 0),
            new Vector3(0, 0, 10),
            new Vector3(10, 0, 10),
            new Vector3(10, 0, 0),
        };
        mesh.vertices = vertices;
        int[] triangles = new int[]
        {
            0, 1, 2,
            0, 2, 3
        };
        mesh.triangles = triangles;
        Vector3[] normals = new Vector3[]
        {
            Vector3.up,
            Vector3.up,
            Vector3.up, Vector3.up
        };
        mesh.normals = normals;

        Vector2[] uvs = new Vector2[]
        {
            new Vector2(0, 0),
            new Vector2(1, 0),
            new Vector2(1, 1),
            new Vector2(0, 1)
        };
        mesh.uv = uvs;
        GameObject obj = new GameObject("MeshObject");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();

        Material material = new Material(Shader.Find("Standard"));
        material.shader = Shader.Find("Sprites/Default");
        material.SetColor("_Color", Color.red);
        renderer.material = material;
    }
//五角星
    public void Drawfivestar()
    {
        Mesh mesh = new Mesh();
        const int num = 5;
        float rad = 0;
        const float r1 = 5, r2 = 2;
        rad = 2 * Mathf.PI / num;
        Vector3[] vertices = new Vector3[num * 2 + 1];
        vertices[0] = Vector3.zero;
        for (int i = 1; i <= num; i++)
        {
            float angle = i * rad;
            float x = Mathf.Cos(angle) * r1;
            float y = Mathf.Sin(angle) * r1;
            Vector3 v1 = new Vector3(x, y, 0);
            vertices[i * 2 - 1] = v1;
            float x1 = Mathf.Cos(angle + (rad / 2)) * r2;
            float y1 = Mathf.Sin(angle + (rad / 2)) * r2;
            Vector3 v2 = new Vector3(x1, y1, 0);
            vertices[i * 2] = v2;
        }
        mesh.vertices = vertices;
        int[] triangles = new int[num * 6];
        for (int i = 0; i < 10; i++)
        {
            if (i != 9)
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = i + 1;
                triangles[i * 3 + 2] = i + 2;
            }
            else
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = 10;
                triangles[i * 3 + 2] = 1;
            }
        }

        mesh.triangles = triangles;
        mesh.RecalculateNormals();

        GameObject obj = new GameObject("MeshObject");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();

        Material material = new Material(Shader.Find("Standard"));
        material.shader = Shader.Find("Sprites/Default");
        material.SetColor("_Color", Color.red);
        renderer.material = material;
    }

    public void DrawBox()
    {
        Mesh mesh = new Mesh();
        const float boxHegih = 5, width = 3;
        Vector3 center = Vector3.zero;
        const float halfSize = 5;
        Vector3[] vertices = new Vector3[]
        {
            new Vector3(center.x - halfSize, center.y - halfSize, center.z - halfSize), // P0
            new Vector3(center.x + halfSize, center.y - halfSize, center.z - halfSize), // P1
            new Vector3(center.x + halfSize, center.y + halfSize, center.z - halfSize), // P2
            new Vector3(center.x - halfSize, center.y + halfSize, center.z - halfSize), // P3
            new Vector3(center.x - halfSize, center.y - halfSize, center.z + halfSize), // P4
            new Vector3(center.x + halfSize, center.y - halfSize, center.z + halfSize), // P5
            new Vector3(center.x + halfSize, center.y + halfSize, center.z + halfSize), // P6
            new Vector3(center.x - halfSize, center.y + halfSize, center.z + halfSize) // P7
        };
        mesh.vertices = vertices;
        int[] triangles = new int[]
        {
            0, 2, 1,
            0, 3, 2,
            1, 2, 6,
            1, 6, 5,
            3, 7, 2,
            7, 6, 2,
            0, 1, 5,
            0, 5, 4,
            3, 0, 4,
            4, 7, 3,
            5, 6, 7,
            7, 4, 5,
        };

        mesh.triangles = triangles;
        mesh.RecalculateNormals();
        GameObject obj = new GameObject("Cube");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();
        Material material = new Material(Shader.Find("Standard"));
        renderer.material = material;
    }
//圆
    public void DrawCircle()
    {
        Mesh mesh = new Mesh();
        const int num = 50;
        float singleAngle = 0;
        const float radius = 3;
        singleAngle = 2 * Mathf.PI / num;
        Vector3 center = Vector3.zero;
        Vector3[] vertices = new Vector3[num + 1];
        vertices[0] = center;
        for (int i = 1; i <= num; i++)
        {
            float currentAngle = i * singleAngle;
            float x = radius * Mathf.Cos(currentAngle);
            float y = radius * Mathf.Sin(currentAngle);
            Vector3 point = new Vector3(x, y, 0);
            vertices[i] = point;
        }
        mesh.vertices = vertices;
        int[] triangles = new int[num * 3];
        for (int i = 0; i < num; i++)
        {
            if (i != num - 1)
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = i + 1;
                triangles[i * 3 + 2] = i + 2;
            }
            else
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = num;
                triangles[i * 3 + 2] = 1;
            }
        }
        mesh.triangles = triangles;
        GameObject obj = new GameObject("MeshObject");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();

        Material material = new Material(Shader.Find("Standard"));
        material.shader = Shader.Find("Sprites/Default");
        material.SetColor("_Color", Color.red);
        renderer.material = material;
    }
//椭圆
    public void DrawEllipse()
    {
        const float r1 = 3, r2 = 7;
        const int num = 100;
        float singleAngle = 2 * Mathf.PI / num;
        Mesh mesh = new Mesh();
        Vector3[] vertices = new Vector3[num + 1];
        vertices[0] = Vector3.zero;
        for (int i = 0; i <= num; i++)
        {
            float x = Mathf.Sin(i * singleAngle) * r1;
            float y = Mathf.Cos(i * singleAngle) * r2;
            Vector3 point = new Vector3(x, y, 0);
            vertices[i] = point;
        }
        mesh.vertices = vertices;
        int[] triangles = new int[num * 3];
        for (int i = 0; i < num; i++)
        {
            if (i != num - 1)
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = i + 1;
                triangles[i * 3 + 2] = i + 2;
            }
            else
            {
                triangles[i * 3] = 0;
                triangles[i * 3 + 1] = num;
                triangles[i * 3 + 2] = 1;
            }
        }
        mesh.triangles = triangles;
        mesh.triangles = triangles;
        GameObject obj = new GameObject("MeshObject");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();

        Material material = new Material(Shader.Find("Standard"));
        material.shader = Shader.Find("Sprites/Default");
        material.SetColor("_Color", Color.red);
        renderer.material = material;
    }
    //空心椭圆   使用内圈圆 的定点坐标 和外圈圆的定点坐标 画出空心椭圆 0,1,2,   1,3,2,  2,3,4 ,3,5,4
    public void HollowEllipse()
    {
        Mesh mesh = new Mesh();
        int num = 60;
        Vector3[] vertices = new Vector3[num * 2];
        float single = 2 * Mathf.PI / num;
        const float innerR1 = 2, innerR2 = 1;
        const float outR1 = 3, outR2 = 2;
        for (int i = 0; i < num; i++)
        {
            float angle = i * single;
            float innerX = Mathf.Sin(angle) * innerR1;
            float innerY = Mathf.Cos(angle) * innerR2;
            vertices[i * 2] = new Vector3(innerX, innerY, 0);
            float outX = Mathf.Sin(angle) * outR1;
            float outY = Mathf.Cos(angle) * outR2;
            vertices[i * 2 + 1] = new Vector3(outX, outY, 0);
        }
        mesh.vertices = vertices;
        int[] triangles = new int[num * 2 * 3];
        for (int i = 0; i < num; i++)
        {
            bool isTrue = i < num - 1;
            int v5 = isTrue ? 2 * i + 3 : 1;
            int v6 = isTrue ? 2 * i + 2 : 0;
            int index = i * 6;
            triangles[index] = i * 2;
            triangles[index + 1] = 2 * i + 1;
            triangles[index + 2] = v6;
            triangles[index + 3] = 2 * i + 1;
            triangles[index + 4] = v5;
            triangles[index + 5] = v6;

        }
        mesh.triangles = triangles;
        mesh.RecalculateNormals();
        GameObject obj = new GameObject("MeshObject");
        MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
        meshFilter.mesh = mesh;
        MeshRenderer renderer = obj.AddComponent<MeshRenderer>();

        Material material = new Material(Shader.Find("Standard"));
        material.shader = Shader.Find("Sprites/Default");
        material.SetColor("_Color", Color.red);
        renderer.material = material;
    }
  
}


http://www.kler.cn/a/582094.html

相关文章:

  • Unity单例模式更新金币数据
  • 华为OD机试-山峰个数(Java 2024 D卷 100分)
  • The Rust Programming Language 学习 (四)
  • vue el-select 省市区三级联动 vue + element-ui使用第三方插件实现省市区三级联动
  • 力扣hot100——子串、普通数组、矩阵
  • 店匠科技携手 PayPal 升级支付体验,助力独立站商家实现全球增长
  • 证券行业SCA开源风险治理实践
  • LivePlayer.js视频H5播放器如何配置iframe允许自动播放和全屏操作
  • 江科大51单片机笔记【11】AT24C02(I2C总线)
  • 【SpringBoot】实现登录功能
  • LeetCode3226 使两个整数相等的位更改次数
  • 给AI编程泼一盆冷水
  • python之replace,strip,split命令
  • STM32之硬件SPI
  • tomcat应用的作用以及安装,以及tomcat软件的开机自启动。
  • Redis Redis介绍、安装 - Redis客户端
  • windows环境DBGPT0.7.0安装部署说明
  • C# 实现软件开机自启动
  • 网络-如果第一次握手旧的序列号先到怎么办?
  • SQL 注入 (C++向)