3
社区成员
发帖
与我相关
我的任务
分享1.通过深度取点,再通过逆矩阵获得模型的原始坐标。
GL.ReadPixels(x, glc.Height - y, 1, 1, PixelFormat.DepthComponent, PixelType.Float, depth);
缺陷就是对精度要求比较高,可能要点击多次才能取到一个点。
为此,我设置一个阀值k,将逆矩阵获得的坐标点P0与原始坐标集合去比较,
如果在集合内,则取点成功。如果不在,取与这个点距离<k的最近的一个点。但是取最近的点,偶尔会与鼠标的箭头相差太远。有什么优化的方法吗
2.通过颜色取点,对每一个点按顺序渲染一个不同的颜色,然后通过颜色去原始坐标集合中去找对应的点
GL.ReadPixels(x, glc.Height - y, 1, 1, PixelFormat.Rgba, PixelType.UnsignedByte, pixels);
缺陷就是会把模型弄的五颜六色的。
以上方法有什么优化的点吗?或者有没有其他的方法能更好的取点呀?
经指点,采用了另外一种方法,这里称为方法3,将所有的原始坐标集合List转换成变换后的坐标集合ListA,从中找出与屏幕的x,y距离最近的点。
之前想过这种方法,当时想着取最近的四个点再做处理,还考虑到Z值问题。故而放弃了,现在想想,不需要对Z值进行考虑。
这种方法对相对于方法1,误差率从0.8降到了0.01,相对更加方便。
但缺点是,每次变换后的坐标集合ListA都需要重新计算,数据过大的话可能会比较耗时。目前采用字典的形式储存数据,后续再优化。