2011-06-15 23 views
3

我需要加速一些使用密集计算的程序,其中需要从立方体,球体和类似物之间的交点进行表面计算。使用CUDA我需要指定我需要的所有formuale,当然,为了分析计算与交叉点有关的信息。但是因为我只需要对结果曲面进行很好的近似处理,所以我了解到OpenGL可以计算或估计这些曲面。不知您是否可以给我您的意见或指向相关参考哪些几何计算可以使用OpenGL加速

+1

你可以更具体地说明你正试图完成的任务吗? – kvark 2011-06-15 18:55:41

+0

计算球体和立方体之间相交所产生的物体的表面,具体是否足够? – flow 2011-06-15 21:11:59

+1

否(回答您的评论,而不是您的问题,但也可能适用),因为这不像您预期​​的那样直观地映射到OpenGL。查看datenwolf的答案,感受解决几何问题和栅格化三角形之间的差异。 – 2011-06-15 21:36:52

回答

1

如果你只需要渲染的对象,你可以使用模板缓存来评价你需要的任何布尔运算:http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node11.html

,可以从任一对相交表面的角度或正投影来计算的任何数量的可能从这样的渲染以及其深度缓冲区中推导出来。如果您需要提取整个交点,则可以尝试使用深度剥离和模板化CSG一起提取完整交点的分层表示,尽管在与查看方向平行的表面部分可能非常不准确,而您将需要做一些额外的工作缝合层回到一起: http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf

编辑:这将适用于任意的,自由形式的表面,是一个相当标准的技术。但它确实有其局限性,因为您获得的准确性会相当差,您可能必须投影到多个视图才能获得足够的对象覆盖。作为一个例子,这里是碰撞检测的一个应用:http://www.cs.ucl.ac.uk/staff/b.spanlang/ISBCICSOWH.pdf

1

OpenGL在这里比CUDA或OpenCL更少使用,因为它主要针对绘制三角形网格。当然,您可以在现代OpenGL的各种着色器阶段进行复杂的几何计算。问题是,所有这些计算的结果都是基于像素的图片。有一个反馈机制来检索处理过的顶点数据,但只会给你一个网格。

任何平面或/和球的交点实际上是相当简单的,可以通过分析来完成。真正的难题是自由曲面(Bezìer或NURBS)相交。那些通常没有封闭的解决方案,所以你需要做的是在数值上逼近最适合交叉点的修剪曲线。