1

这是我的问题。我正在对具有数百个顶点的复杂、自相交、多轮廓多边形进行细分。GLU Tesselator 因空指针 0x0000000 问题而崩溃。当我不制作自相交多边形时,它永远不会崩溃。如果它不相交,那么无论在什么情况下,它都不会崩溃。我在我的应用程序中到处检查 NULL,我确定它不在我这边。我从 SGI 找到了一个旧版本的 GLU 1.2,它从不崩溃,但是基于 GLU 1.3 的 mesa 和 Windows 版本都崩溃了。调试模式下没有什么崩溃足够奇怪。为了获得更多信息,我编译了 Mesa 的 GLU 并看到首先断言失败,然后如果我将其注释掉,则有一个指针从一个无法 malloc 的函数设置为 NULL。我现在非常不确定该怎么做。我能做些什么来尝试解决这个问题?我是否应该尝试制作适合我的 Mesa 的 GLU 版本?我只是不确定如何从这里开始。

经过更多调试后,我看到我得到了 GLU_TESS_ERROR_5,我认为这是一个数字太大的错误,但我做了一个 for 循环来测试大于那个的数字,但没有运气:(

4

1 回答 1

1

至少在 Windows 上,GLU_TESS_ERROR_5 意味着其中一个坐标太大。具体来说,GLU 要求坐标足够小,可以相乘而不会溢出。规范说限制是在常量 GLU_TESS_COORD_TOO_LARGE 中定义的。如果这个常数存在,检查每个坐标的绝对值是否小于它。如果不是,我认为检查坐标是否在 - 10^150 和 10^150 之间是安全的。如果这不起作用,请尝试逐渐减小范围。

也可能是几何有问题,这引发了 GLU 中的另一个问题。尝试找到会触发此错误的最简单的多边形。

如果这不起作用,请查看是否有更新版本的 GLU 可用。我不了解 Mesa,但众所周知,VC++ 附带的 OpenGL 版本已经过时了。

如果一切都失败了,您可以尝试使用另一个库来执行镶嵌。经过快速搜索,三角形1似乎是一个不错的候选者。

于 2011-02-19T01:34:43.303 回答