热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

朝向_Unity绘制点云(untiydrawpointcloud)

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Unity绘制点云(untiydrawpointcloud)相关的知识,希望对你有一定的参考价值。现在好多图像识别

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Unity绘制点云(untiy draw point cloud)相关的知识,希望对你有一定的参考价值。


现在好多图像识别会设计点云显示问题,这里简单说下
本篇先说下静态实现方法:


一.Mesh实现

使用mesh的方式显示点云,比如本篇以绘制一个大象的点云为例
mesh方式实现结果如图:

点云的数据这里是网上找的数据,然后存成csv文件读取,个人认为csv文件在读取数据方面还是很方便的。
核心代码如下:

using UnityEngine;
using System.Collections;
using System.IO;
public class DrawMeshPointCloud : MonoBehaviour
ArrayList list = new ArrayList();
void Start()

// 1. 读取数据
list = ReadFile();
// 2. 渲染
CreateMesh();

ArrayList ReadFile()

// 提前将点云存成csv文件放在Assert/StreamingAssets文件夹下,文本的每行代表一个点,由点的x,y,z
//csv文件存储数据,用逗号分隔,比较容易读取处理
string path = (Application.streamingAssetsPath + "/" + "elephant.csv");
FileInfo fInfo = new FileInfo(path);
string s = "";
StreamReader r;
ArrayList vecList = new ArrayList();
if (fInfo.Exists)

r = new StreamReader(path);

else

Debug.Log("文件不存在");
return null;

// 点云数据存入队列
while ((s = r.ReadLine()) != null)

string[] words = s.Split(","[0]);
Vector3 xyz = new Vector3(float.Parse(words[0]), -float.Parse(words[1]), float.Parse(words[2])) * 10;
vecList.Add(xyz);

return vecList;

void CreateMesh()

int num = list.Count;
GameObject pointObj = new GameObject();
pointObj.name = "new";
//处理大象朝向
pointObj.transform.rotation = Quaternion.Euler(new Vector3(180, -180, 0));
pointObj.AddComponent();
pointObj.AddComponent();
Mesh meshNeed = new Mesh();
Material mat = new Material(Shader.Find("Custom/VertexColor"));
pointObj.GetComponent().mesh = meshNeed;
pointObj.GetComponent().material = mat;
Vector3[] points = new Vector3[num];
Color[] colors = new Color[num];
int[] indecies = new int[num];
for (int i = 0; i
points[i] = (Vector3)list[i];
indecies[i] = i;
colors[i] = Color.white;

meshNeed.vertices = points;
meshNeed.colors = colors;
meshNeed.SetIndices(indecies, MeshTopology.Points, 0);


二、粒子的方式实现

场景里添加一个粒子系统,设置速度为0,也可以实现
实现效果如图:

核心代码如下:

ParticleSystem.Particle[] allParticles; // 所有粒子的集合
void DrawPointCloud(ArrayList drawList)

var main = particleSystem.main;
main.startSpeed = 0.0f; // 设置粒子的初始速度为0
main.startLifetime = 1000.0f;
var pointCount = drawList.Count;
allParticles = new ParticleSystem.Particle[pointCount];
main.maxParticles = pointCount;
particleSystem.Emit(pointCount);
particleSystem.GetParticles(allParticles);
for (int i = 0; i
allParticles[i].position = (Vector3)drawList[i]; // 设置每个点的位置
allParticles[i].startColor = Color.yellow; // 设置每个点的rgb
allParticles[i].startSize = 0.02f;

particleSystem.SetParticles(allParticles, pointCount); // 将点云载入粒子系统


总结

两种方法都能实现,具体的性能方面自己可以具体比较下,目前这两种方式都能实现静态的点云显示,个人偏向第二种,因为后面动态的点云更新,用第二种比较方便。

完整工程下载


推荐阅读
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
author-avatar
心若在梦就在_2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有