unity使用mesh 画图(1)

news2025/3/13 16:45:45

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.coloradmin.cn/o/2314400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本&#xff0c;其他的没尝试&#xff0c;如果大家系统和我的不一致&#xff0c;请自行判断&#xff0c;基本上没什么大的出入啊。 openManus的Git地址&#xff1a;https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…

视频推拉流:EasyDSS平台直播通道重连转推失败原因排查与解决

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推&#xff0c;发现只要关闭…

【科研绘图系列】python绘制分组点图(grouped dot plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据函数`generateRectBoxDF` 函数主要作用参数解释逻辑流程`nmfDotPlot` 函数主要作用参数解释逻辑流程画图1画图2画图3画图4介绍 【科研绘图系列】python绘制…

Springfox、Springdoc和Swagger

Springfox、Swagger 和 Springdoc Springfox、Swagger 和 Springdoc 是用于在 Spring Boot 项目中生成API文档的工具&#xff0c;但它们之间有显著的区别和演进关系&#xff1a; 1.Swagger 简介 Swagger 是一个开源项目&#xff0c;旨在为 RESTful APIs 提供交互式文档。最…

在Spring Boot项目中如何实现获取FTP远端目录结构

Java语言实现获取FTP远端目录结构的实现方式有多种,在Spring Boot 项目中,最简单和快速的方式就是使用Spring Integration 实现FTP相关的功能。 前言 本篇的示例和演示基于Windows 的FTP 服务,关于如何在Windows 开启FTP服务可以参考: Windows 如何开启和使用FTP服务 本…

Flutter_学习记录_device_info_plus 插件获取设备信息

引入三方库device_info_plus导入头文件 import package:device_info_plus/device_info_plus.dart;获取设备信息的主要代码 DeviceInfoPlugin deviceInfoPlugin DeviceInfoPlugin(); BaseDeviceInfo deviceInfo await deviceInfoPlugin.deviceInfo;完整案例 import package…

Java高频面试之集合-10

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详解红黑树&#xff1f;HashMap为什么不用二叉树/平衡树呢&#xff1f; 一、红黑树&#xff08;Red-Black Tree&#xff…

never_give_up

一个很有意思的题&#xff1a; never_give_up - Bugku CTF平台 注意到注释里面有1p.html&#xff0c;我们直接在源代码界面看&#xff0c;这样就不会跳转到它那个链接的&#xff1a; 然后解码可得&#xff1a; ";if(!$_GET[id]) {header(Location: hello.php?id1);exi…

Python Selenium库入门使用,图文详细。附网页爬虫、web自动化操作等实战操作。

文章目录 前言1 创建conda环境安装Selenium库2 浏览器驱动下载&#xff08;以Chrome和Edge为例&#xff09;3 基础使用&#xff08;以Chrome为例演示&#xff09;3.1 与浏览器相关的操作3.1.1 打开/关闭浏览器3.1.2 访问指定域名的网页3.1.3 控制浏览器的窗口大小3.1.4 前进/后…

AI4CODE】3 Trae 锤一个贪吃蛇的小游戏

【AI4CODE】目录 【AI4CODE】1 Trae CN 锥安装配置与迁移 【AI4CODE】2 Trae 锤一个 To-Do-List 这次还是采用 HTML/CSS/JAVASCRIPT 技术栈 Trae 锤一个贪吃蛇的小游戏。 1 环境准备 创建一个 Snake 的子文件夹&#xff0c;清除以前的会话记录。 2 开始构建 2.1 输入会…

Linux 进程的一生(一):进程与线程的创建机制解析

在 Linux 操作系统中&#xff0c;每个任务都以「进程」的形式存在。但 Linux 下的「线程」又是什么&#xff1f;Linux 并没有单独定义一种全新数据结构来表示线程&#xff0c;而是将线程视为一种特殊的进程——一种共享资源的轻量级进程。然而&#xff0c;在具体实现和运行机制…

STM32之I2C硬件外设

注意&#xff1a;硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器&#xff0c;此时会置状态寄存器的TXE为1&#xff0c;表示发送寄存器为空&#xff0c;然后往数据控制寄存器中一位一位的移送数…

windows版本的时序数据库TDengine安装以及可视化工具

了解时序数据库TDengine&#xff0c;可以点击官方文档进行详细查阅 安装步骤 首先找到自己需要下载的版本&#xff0c;这边我暂时只写windows版本的安装 首先我们需要点开官网&#xff0c;找到发布历史&#xff0c;目前TDengine的windows版本只更新到3.0.7.1&#xff0c;我们…

【AI】单台10卡4090 openEuler服务器离线部署kasm workspace 提供简单的GPU云服务 虚拟化桌面

下载网址 Downloads | Kasm Workspaces 文件连接 wget https://kasm-static-content.s3.amazonaws.com/kasm_release_plugin_images_amd64_1.16.1.98d6fa.tar.gz wget https://kasm-static-content.s3.amazonaws.com/kasm_release_1.16.1.98d6fa.tar.gz wget https://kasm-st…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤&#xff1a; 一、基础准备&#xff1a; 工具下载网址页面&#xff1a;https://www.cmsoft.cn/resource/102.html 下载安装好后&#xff0c;根据需要可以创建多个server&#xff0c;双击程序图标运行即可&#xff0c;下面…

47.HarmonyOS NEXT 登录模块开发教程(二):一键登录页面实现

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;二&#xff09;&#xff1a;一键登录页面实现 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff0…

5.1 程序调试

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 本节中为了演示方便&#xff0c;使用的代码如下&#xff1a; 【例 5.1】【项目&#xff1a;code5-001】程序的调试。 static void Ma…

Cursor初体验:excel转成CANoe的vsysvar文件

今天公司大佬先锋们给培训了cursor的使用&#xff0c;还给注册了官方账号&#xff01;跃跃欲试&#xff0c;但是测试任务好重&#xff0c;结合第三方工具开发也是没有头绪。 但巧的是&#xff0c;刚好下午有同事有个需求&#xff0c;想要把一个几千行的excel转成canoe的系统变…

vue3-element-admin 前后端本地启动联调

一、后端环境准备 1.1、下载地址 gitee 下载地址 1.2、环境要求 JDK 17 1.3、项目启动 克隆项目 git clone https://gitee.com/youlaiorg/youlai-boot.git数据库初始化 执行 youlai_boot.sql 脚本完成数据库创建、表结构和基础数据的初始化。 修改配置 application-dev.y…

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端&#xff0c;安装完MySQL后会有两个客户端…