想用delphi的viewport3d做一个三维的点云图,可以实现吗?

sxbug 2018-04-22 03:57:29
delphi berlin,win 10,想做一个程序,将三维坐标的很多点,用图形直观展示出来,同时支持旋转、缩放、平移。可以实现吗?

第一步就是想把这些点 先画出来,这个都没有找到资料,我打算就用 自带的viewport3D来实现,可以做吗?

谢谢
...全文
2345 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shine6Z 2019-11-02
  • 打赏
  • 举报
回复

#region 点云方案
double x_pos = Convert.ToDouble(positions.x_pos.HasValue ? positions.x_pos * factor - x_orz : (MS3D.Positions.Count > 1 ? MS3D.Positions[MS3D.Positions.Count - 12].X : 0.0));//增加计算原点偏移
double y_pos = Convert.ToDouble(positions.y_pos.HasValue ? positions.y_pos * factor - y_orz : (MS3D.Positions.Count > 1 ? MS3D.Positions[MS3D.Positions.Count - 12].Y : 0.0));//增加计算原点偏移
double z_pos = Convert.ToDouble(positions.z_pos.HasValue ? positions.z_pos * factor - z_orz : (MS3D.Positions.Count > 1 ? MS3D.Positions[MS3D.Positions.Count - 12].Z : 0.0));//增加计算原点偏移

MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos));
MS3D.Positions.Add(new Point3D(x_pos + 0.1, y_pos, z_pos));
MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos + 0.1));

MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos));
MS3D.Positions.Add(new Point3D(x_pos, y_pos + 0.1, z_pos));
MS3D.Positions.Add(new Point3D(x_pos + 0.1, y_pos, z_pos));

MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos));
MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos + 0.1));
MS3D.Positions.Add(new Point3D(x_pos, y_pos + 0.1, z_pos));

MS3D.Positions.Add(new Point3D(x_pos, y_pos, z_pos + 0.1));
MS3D.Positions.Add(new Point3D(x_pos + 0.1, y_pos, z_pos));
MS3D.Positions.Add(new Point3D(x_pos, y_pos + 0.1, z_pos));
#endregion

点转换成三棱锥大致是这样的,至于模型适应缩放三棱锥体的算法自行研究
Shine6Z 2019-11-02
  • 打赏
  • 举报
回复
已做完,不是用小球,是用一堆三棱锥替代每个点,计算完所有向量坐标后直接导入viewport3D就能显示了
  • 打赏
  • 举报
回复
那是因为你没有正确设置Mesh1.Data.TriangleIndices,这些索引确定哪三个点构成一个三角形。Points、TriangleIndices这些属性是string,主要是为了方便从外部模型中加载数据,因为很多模型是文本格式存储的,为了加快速度可以用VertexBuffer、IndexBuffer。
sxbug 2018-04-27
  • 打赏
  • 举报
回复
显示的图形,不管怎么弄都是一个方形。 就是红球 右下角的那个方形
sxbug 2018-04-27
  • 打赏
  • 举报
回复
非常感谢大侠的支持。我用的viewport3d,但显示的mesh感觉不对,还望指教。我的参数是:Mesh1.Data.Normals := '0.0 0.0 -1 ,0.0 0.0 -1 ,0.0 0.0 -1 ,0.0 0.0 -1 ,0.0 0.0 1 ,0.0 0.0 1 ,0.0 0.0 1 ,0.0 0.0 1'; Mesh1.Data.Points := '-1.123 -3 3 ,3 -2.5 3 ,-3 3 3 ,3 3 3 ,3 -3 3 ,3 -3 -3 ,3 3 3 ,3 3 -3,1 2 3,-2 2 2,1.234 3.123 5.221';
sxbug 2018-04-26
  • 打赏
  • 举报
回复
不是积分的问题,请大侠不要误会。我是诚心请教,解决问题,已下载了。现在最大的问题是 很多点,这要如何解决,渲染3万多个球 估计要十几分钟,如果上百万,估计很难实现了,请问有画点的方法吗?或者把点连成一个多边形,可行吗?万分感谢
  • 打赏
  • 举报
回复
原来就是异形的管子,这种用TMesh很容易自己构建模型,通过设置一系列顶点,可以构建任意复杂的曲面(封闭或者不封闭),完全不需要用点去模拟,EMB网站上简单的例子:http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/FMX.TMesh_(Delphi) 更简单的方法是直接用3DS MAX/Maya之类的软件建立一个模型,然后用TModel3D.LoadFromFile直接加载。
sxbug 2018-04-26
  • 打赏
  • 举报
回复
我把python画的截面图,发上来看看
sxbug 2018-04-26
  • 打赏
  • 举报
回复
能留一个邮箱不?我把我截面的点坐标发给您,看看有办法解决不?截面的形状比较特殊,有几百个这样的截面,然后构成一个柱体,我要对柱体进行观察。现在几乎找不到人交流这块技术。加微信更好,搞完了好发小红包。谢谢
  • 打赏
  • 举报
回复
Points := TObjectList<TSphere>.Create; 只是把创建的小球对象保存起来,方便以后控制,在程序中并没用到。也可以用动态数组array of TSphere保存,后者更节约内存,性能也好一些。 上百万点太多了,每个点用一个球体表示不现实,专业显卡也做不到同屏显示上百万个球体,用方块(TCube)能好一些,FMX默认情况下每个球体用192个多边形绘制,而方块只有6个面,实际测试创建一万个球体,程序占用内存约240MB,用方块只有80几MB,但是性能仍然有问题,创建一万个方块耗时50秒左右,也是不能接受的。 解决方法大致有两种,一是使用缩略模式,显示缩减到1000球体(或方块)这一级别,每个球体代表一个区域内点的密集程度,用颜色/灰度或者不同的贴图表示。另一种方法是彻底不使用可视对象,在TDummy的OnRender事件处理中自己绘制,其提供的Context: TContext3D对象有很多绘制方法,不过每次绘制一百万点也没有必要,根本看不清楚,还是要缩略一下。
  • 打赏
  • 举报
回复
Points := TObjectList<TSphere>.Create; 只是把创建的小球对象保存起来,方便以后控制,在程序中并没用到。 上百万点太多了,每个点用一个球体表示不现实,专业显卡也做不到同屏显示上百万个球体,用方块(TCube)
sxbug 2018-04-25
  • 打赏
  • 举报
回复
请教 Points := TObjectList<TSphere>.Create; 这句是为了什么?谢谢
sxbug 2018-04-25
  • 打赏
  • 举报
回复
edge 不能下载。用IE老版本可以。在想问一下,能用点不?因为我有上百万个点,用sphere 怕占内容啊。用什么命令可以实现。谢谢
  • 打赏
  • 举报
回复
下载个数: 2 ,说明可以下,2资源分的问题,不是我要资源分,是现在csdn不能发0分资源。
  • 打赏
  • 举报
回复
我写个例子...
sxbug 2018-04-24
  • 打赏
  • 举报
回复
发个邮件,万分感谢 sxbug@163.com
sxbug 2018-04-24
  • 打赏
  • 举报
回复
毫不犹豫去下载,结果无法下载。我请你核实一下
  • 打赏
  • 举报
回复
sxbug 2018-04-23
  • 打赏
  • 举报
回复
viewport3D 中放置了几个方形,然后放一个摄像机,通过调整摄像机的Z值,想控制缩放,结果没有效果,请问怎么弄?谢谢
sxbug 2018-04-23
  • 打赏
  • 举报
回复
刚才我修改了几个文件,能新建3d application了,但发现 3d application 不能放button,总之不好用。能再告诉我在viewport3D怎么弄不? 谢谢
加载更多回复(6)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧