当前位置: 首页 > 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), // P0new Vector3(center.x + halfSize, center.y - halfSize, center.z - halfSize), // P1new Vector3(center.x + halfSize, center.y + halfSize, center.z - halfSize), // P2new Vector3(center.x - halfSize, center.y + halfSize, center.z - halfSize), // P3new Vector3(center.x - halfSize, center.y - halfSize, center.z + halfSize), // P4new Vector3(center.x + halfSize, center.y - halfSize, center.z + halfSize), // P5new Vector3(center.x + halfSize, center.y + halfSize, center.z + halfSize), // P6new 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,4public 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;}}

相关文章:

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){retu…...

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

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

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

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

机器人领域专业名词汇总

1. 电机与驱动 电机类型 DC Motor&#xff08;直流电机&#xff09;&#xff1a;通过直流电源驱动的电机。Stepper Motor&#xff08;步进电机&#xff09;&#xff1a;通过脉冲信号控制旋转角度的电机。Servo Motor&#xff08;伺服电机&#xff09;&#xff1a;带有反馈控制的…...

成为超人 21:超人怎么学?技能的学习,如编程

成为超人 21&#xff1a;超人怎么学&#xff1f;技能的学习&#xff0c;如编程 ① 搞定全能自恋② 超人怎么学&#xff1f;③ 耐心怎么来&#xff1f; 宇树机器人王兴兴&#xff1a;奇迹也有算法&#xff0c;做成事没有那么难&#xff0c;就是把不可能三个字&#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 前进/后…...

聊天室Python脚本——ChatGPT,好用

下面提供两个 Python 脚本&#xff0c;一个作为服务器端&#xff08;chat_server.py&#xff09;&#xff0c;一个作为客户端&#xff08;chat_client.py&#xff09;。你可以在一台电脑上运行服务器脚本&#xff0c;然后在不同电脑上运行客户端脚本&#xff08;连接时指定服务…...

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

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

【语料数据爬虫】Python爬虫|批量采集会议纪要数据(1)

前言 本文是该专栏的第2篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 在本文中,笔者将主要来介绍基于Python,来实现批量采集“会议纪要”数据。同时,本文也是采集“会议纪要”数据系列的第1篇。 采集相关数据的具体细节部分以及详细思路逻辑,笔…...

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

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

【面试题集合】

目录 强缓存VS协商缓存**一、强缓存&#xff08;本地缓存&#xff09;**1. **定义**2. **核心 HTTP 头**3. **缓存生效流程**4. **应用场景** **二、协商缓存&#xff08;条件请求&#xff09;**1. **定义**2. **核心 HTTP 头**3. **缓存生效流程**4. **应用场景** **三、强缓存…...

【Academy】SSRF ------ Server-side request forgery

SSRF ------ Server-side request forgery 1. 什么是 SSRF&#xff1f;2. SSRF 攻击的影响是什么&#xff1f;3. 常见的 SSRF 攻击3.1 针对服务器的 SSRF 攻击3.2 针对其他后端系统的 SSRF 攻击 4. 规避常见的 SSRF 防御4.1 具有基于黑名单的输入过滤器的 SSRF4.2 具有基于白名…...

Git 的详细介绍及用法

一、Git 的优点 分布式版本控制 每个开发者都拥有完整的仓库副本&#xff0c;无需依赖中央服务器&#xff08;如 SVN&#xff09;。支持离线操作&#xff08;提交、查看历史、创建分支等&#xff09;。 高效的分支管理 创建和切换分支速度快&#xff08;几乎是瞬间完成&#x…...

Ubuntu22.04安装数据

数据库安装步骤&#xff1a; sudo apt-get update sudo apt install mysql-server mysql-client sudo systemctl start mysql sudo systemctl status mysql &#xff08;1&#xff09;在命令行登录 MySQL 数据库&#xff0c;并使用 mysql 数据库 &#xff08;必须使用这个…...

2025 ubuntu24系统宿主机上在线安装mysql数据库完整演示

说明&#xff1a;这是ubuntu24系统和安装后mysql的版本 rootmaster:/home/ubuntu# cat /etc/os-release PRETTY_NAME"Ubuntu 24.04.2 LTS" NAME"Ubuntu" VERSION_ID"24.04" VERSION"24.04.2 LTS (Noble Numbat)" VERSION_CODENAMEnob…...

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;下面…...

《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》

在科技飞速发展的今天&#xff0c;量子计算与经典算法的融合成为了前沿领域的焦点。DeepSeek-M8的“量子神经网络混合架构”&#xff0c;宛如一把钥匙&#xff0c;开启了经典算法与量子计算协同推理的全新大门&#xff0c;为诸多复杂问题的解决提供了前所未有的思路。 量子计算…...

力扣1251年

正确写法&#xff1a; select p.product_id, ifnull(round(sum(units*price)/sum(units),2),0) average_price from prices p left join unitssold u on u.product_idp.product_id and u.purchase_date between start_date and end_date group by p.product_id; 错误写法&a…...

【写作模板】JosieBook的写作模板

文章目录 ⭐前言⭐一、设计模式怎样解决设计问题&#xff1f;&#x1f31f;1、寻找合适的对象✨(1)✨(2)✨(3) &#x1f31f;2、决定对象的粒度&#x1f31f;3、指定对象接口&#x1f31f;4、描述对象的实现&#x1f31f;5、运用复用机制&#x1f31f;6、关联运行时和编译时的结…...

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…...