Unity绘制点云(untiy draw point cloud)
Posted 御雪妃舞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity绘制点云(untiy draw point cloud)相关的知识,希望对你有一定的参考价值。
上一篇中主要都是静态的点云,这篇简单说下动态的点云
实际上就是拿到的数据点是动态的,绘制要实时刷新,mesh我就不推荐了
这里说说粒子的就好
先看下效果
这里模拟了一个动态的点,实际以动态点的位置为准,然后实时刷新绘制就可以了
代码如下:
using UnityEngine;
using System.Collections;
using System.IO;
public class DrawParticlePoint : MonoBehaviour
ParticleSystem particleSystem; // 整个粒子系统
int pointCount; // 粒子数目
ArrayList list = new ArrayList();
ArrayList dynamicList = new ArrayList();
// Use this for initialization
void Start()
particleSystem = GetComponent<ParticleSystem>();
// 1. 读取数据
list = ReadFile();
dynamicList = list;
//2.粒子显示
DrawPointCloud(list);
private void FixedUpdate()
DynamicPoint();
DrawPointCloud(dynamicList);
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;
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 < pointCount; i++)
allParticles[i].position = (Vector3)drawList[i]; // 设置每个点的位置
//allParticles[i].startColor = Color.yellow; // 设置每个点的rgb
allParticles[i].startSize = 0.05f;
particleSystem.SetParticles(allParticles, pointCount); // 将点云载入粒子系统
void DynamicPoint()
for (int i = 0; i < dynamicList.Count; i++)
if (i % 4 == 0)
dynamicList[i] = (Vector3)dynamicList[i] - new Vector3(0.01f, 0, 0);
else if (i % 4 == 1)
dynamicList[i] = (Vector3)dynamicList[i] + new Vector3(0, 0.01f, 0);
else if (i % 4 == 2)
dynamicList[i] = (Vector3)dynamicList[i] + new Vector3(0.01f, 0, 0);
else if (i % 4 == 3)
dynamicList[i] = (Vector3)dynamicList[i] - new Vector3(0, 0.01f, 0);
就这样就可以了,这个就不贴资源了,在上篇中简单改下就好了
以上是关于Unity绘制点云(untiy draw point cloud)的主要内容,如果未能解决你的问题,请参考以下文章