一个三维点投影到二维屏幕的点选择的问题

这是一个典型的拾取问题,已有相当成熟的解决方法。不了解问题的上下文,但不建议使用链表这种无法实现O(1)访问的数据结构。如果忽略链表这个数据结构,那么比较容易立刻想到的两种方法:1) 在屏幕空间解决。如朱萌所说,第一步将世界空间内的所有三维点通过一系列矩阵变换转换到屏幕空间,并得到对应的二维屏幕像素坐标。第二步将鼠标点击处屏幕像素坐标与转化所得二维坐标比较。第一步可以完全并行化,第二步可以采用四叉树或kd树把屏幕细分降低复杂度到log(N)。2) 模拟光线追踪过程。第一步将鼠标点选处逆变换到世界坐标P,生成从视点到P的射线。第二步在世界空间内判断射线与各三维点(或以该点为中心的有限平面区域)的相交情况。第二步可利用八叉树或kd树对空间细分降低复杂度至log(N)。
■网友
如果按照问题的那种先映射到2D平面中再做判断,可以考虑用GPU shader加速,这样对于每一个点,通过GPU的并行计算,一下就得到所有点的2D坐标,并且在并行计算过程中,就可以完成最近点的计算。 我想应该会有更简单的方法,但上述是我实现过的方法!
■网友
我是以种幻觉去看很多图都可以在一两秒之内看出,然后由近至远看,远看立体效果更佳。


    推荐阅读