读书人

用vc++和opengl编程如何实现两个实体的

发布时间: 2012-01-05 22:36:54 作者: rapoo

用vc++和opengl编程怎么实现两个实体的差运算?
查过资料上是说用拓扑结构三维建模,然后离散,求交,等等,比较模糊的,不太理解,最好能给个实例源代码。或者实例下载链接等。期待大神指点迷津。谢谢。
以前有人问过类似的问题,但似乎没能得到确切的答案。希望这次有进步,能得到解决的方案。

[解决办法]
这个涉及的主要是具体的算法,VC+OPENGL只是实现过程中的东西

求交首先是要看三维模型的形式,比如说参数曲面求交和隐式曲面求交的方法是不同的,隐式曲面求交求差比较简单,但是是建立在你完全把隐式曲面弄清楚的前提下,而实际应用中大部分都是参数曲面模型

另外,你可以查阅一下碰撞检测的相关文献,求差首先是要判断两个模型是否相交,相交就属于碰撞,检测到捧撞后就会有处理碰撞的方法,也许其中就会有求差的方法

你描述这个东西比较泛,也许可以再具体一些,最后具体到什么程度,才可能和代码联系上,否则别人提供代码可能你也用不上的,反而在理解这个代码上浪费时间。
[解决办法]
三步骤
1 求交
目的是 所有的面面求交线,面面求交线 要用到线面求交。为了快速求教 有好些算法的如包围盒等等

2 分割
根据交线 分割有交线的面为更小的面,怎么分割?先使用一条交线,若在面内,是一个内环,内环由2个线条组成,2个线条只是开始结束点颠倒,加上下一条,怎么办。。。。。。很复杂的。
3 分类
一个实体相对于另一个实体对所有的面分类,1内部 2 外部 3 表面上, 怎么分类,根据环山的点阿。。。。。。。。
4 选择
根据 交,差,还是并算,以及对面的分类,选择需要的面。形成新的实体。一句话而已,做起来very different.抛弃的面内存释放掉他,那多出来的点呢?那些点是多出来而不被新实体的面所用,线条呢
。。。。

额外说明
三维实体的表示很重要的哦,什么数据结构阿?表示不好没有办法做下去的额,面,边界也是很重要的哦,几何,参数,一般方程表示? 没有表示好计算的时候好好难耶。
对了 曲线曲面熟悉不? 他们的相关运算很专业的。



看看cagl,opencasecade有没有现成的代码,不要尝试汤这个浑水,一般都会死的很惨。有些东西是前人不知道多少次教训后得到的经典结果,直到结果就可以了,不需要把他的惨痛的经历在重现了。另外这玩意效率很重要,提高运算有很多算法的。

刚听说 有人大三的时候能把这个作出来,崇拜死我了。

读书人网 >VC/MFC

热点推荐