这是我的问题。我正在整理具有数百个顶点的复杂,自相交,多轮廓多边形。 GLU Tesselator因空指针0x0000000问题而崩溃。当我不创建自相交多边形时,它永远不会崩溃。如果不相交,无论在任何情况下都不会崩溃。我在应用程序中各处检查NULL,我确定它不是我的事情。我从SGI找到了旧版本的GLU 1.2,它从未崩溃,但是基于GLU 1.3的台面和Windows版本都崩溃了。在 Debug模式下没有什么崩溃足够严重。为了获取更多信息,我编译了Mesa的GLU,看到首先一个assert失败,然后如果我注释掉,则存在一个指针,该指针从无法malloc的函数设置为NULL。我现在不确定该怎么做。我该怎么做才能解决这个问题?我是否应该尝试制作适用于我的Mesa GLU版本?我只是不确定如何从这里继续。
经过更多的调试后,我看到我得到了GLU_TESS_ERROR_5,我认为这是一个数字太大的错误,但是我做了一个for循环来测试大于此的数字,但是没有运气:(
最佳答案
至少在Windows上,GLU_TESS_ERROR_5表示坐标之一太大。具体来说,GLU要求坐标足够小,可以相乘而不会溢出。规范说限制是在常量GLU_TESS_COORD_TOO_LARGE中定义的。如果存在此常数,请检查每个坐标的绝对值是否小于该常数。如果没有,我认为检查坐标在-10 ^ 150和10 ^ 150之间是安全的。如果这样不起作用,请尝试逐渐缩小范围。
也可能是几何存在问题,这引发了GLU中的另一个问题。尝试找到将触发此错误的最简单的多边形。
如果这不起作用,请查看是否有可用的较新版本的GLU。我不知道Mesa,但是众所周知,VC++附带的OpenGL版本已经过时了。
如果所有其他方法均失败,则可以尝试使用另一个库执行镶嵌。快速搜索之后,Triangle 1似乎是一个不错的选择。