3D界面的好处:增加了一个维度,可以塞下更多展示内容。也可以有更多的展示图层,便于组织信息。可以实现拖放 ,手动排序功能。
但是3D界面的操作更困难。如果是2D,只需要计算光标是否落入某个盒子,如果落入盒子则结合其他输入,进行选中、点击、拖动等动作。但是3D界面需要对于栅格化后的像素矩阵,反向查询每个像素属于透视关系的某个盒子,就像sketchup中做的一样。
尚未找到processing中的3D界面的插件, 用一些关键字在bing里搜索:“select object RayTracing”,“3D Object picking -processing” 得到的结果如下:
https://forum.processing.org/two/discussion/2631/how-to-pick-an-object-in-3d
How to pick an object in 3D?
http://www.3dkingdoms.com/selection.html
选择教程(3D编程)
https://ahbejarano.gitbook.io/lwjglgamedev/chapter23
3D对象拾取
https://blog.csdn.net/hmbxsy/article/details/80509876
计算机图形学——光线追踪(RayTracing)算法
https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation
Rasterization: a Practical Implementation
https://www.scratchapixel.com/lessons/3d-basic-rendering/rasterization-practical-implementation
找到了插件--GUI3D,可以检测鼠标指针在3D空间的一个平面内的位置,只能建立3D控件,不可移动,如下图
接下来的路有2条,一是自己开发processing 3D选中插件,二是仅仅用2D界面对3D界面操作。
自己开发processing 3D选中插件:
1--从3d场景生成2D图片,并对图片上每个点分类,形成分区的2D图片,建立一个2维矩阵,矩阵的坐标是窗口大小,矩阵的内容是对应的3D物品(或者背景)
2--实时计算每个点对应的3D物品。知道了视点,光标坐标,就可以发射一束光,照射到某个3D物品或背景。这其实是计算机图形学——光线追踪(RayTracing)算法。
这些都需要一定的算力,也会拖慢刷新率,造成卡顿。
暂时不做。
用2D方法控制3D内容:见下篇文章
网友评论