首先,免责声明。我很清楚X对Y的标准答案 - “它取决于”。但是,我正在研究一种非常通用的产品,我试图找出“这取决于什么”。我也不能真正测试各种各样的硬件,所以试一试是最好的措施。
我一直在做一些谷歌搜索,我发现很少使用离线渲染目标/表面进行测试。我不确定命名法,我正在谈论的是使用非常简单的着色器将几何ID(例如)渲染到缓冲区,然后读取鼠标下的像素值以查看直接在鼠标指针。
然而,我已经找到了101个关于做三角形交叉的不同教程,一个D3DXIntersect& DirectX示例“选择”。我对此有点好奇 - 我原以为使用HW是标准方法。按照所有权利,它应该快许多个数量级,并且应该扩展得更好。
我对图形编程比较陌生,所以这是我的假设,让你消失。
1)一个简单的着色器,可进行几何变换&写一个Node + UV值应该几乎是免费的。
2)当将渲染表面从GPU上取回以供CPU读取时,HW pick方法的主要成本是缓冲区提取。我不知道这是多么昂贵。我们?女士?秒?分钟?
3)这可能是显而易见的,但我假设Triangle Intersection(D3DXIntersect)只能在CPU上使用。
4)人们想要避免的可能成本是额外渲染目标(zbuffer + surface)的成本。我对于1024x1280(标准屏幕大小?)大约10兆的问题。这对我来说是可以接受的,虽然如果我可以渲染一个较小的表面(记忆的交易准确性),我会这样做(这可能吗?)。
这一切都引出了一些想法。
1)对于非常简单的场景,三角形交点可能更快。在这一点上很难猜到简单/复杂的东西。我正在寻找可能的100s tris到10000s。可能没有那么多。
2)无论是否使用HW缓冲区(在我的情况下),都需要渲染它。但是,它可以在没有成本的情况下重复使用(例如,点击拖动,鼠标在静态场景中的跟踪)
2a)如果我的场景每帧更新一次,或者我的鼠标交互有限,可能会更喜欢三角交叉。
现在我写完了,我看到一个类似的问题被问到:(3D Graphics Picking - What is the best approach for this scenario)。我的问题是(a)为什么你需要重新渲染拾取曲面以进行点击拖动,因为你的场景实际上没有改变,而且(b)它不会仍然更快比三角交叉点?
我欢迎思想,批评和任何方式跟踪: - )