首页 文章

OpenSceneGraph CullVisitor :: apply(Geode&)检测到NaN

提问于
浏览
0

我试图使用OSG在屏幕上显示一些立方体 .

在某些运行中它运行良好,但有时它不会显示任何内容,只需在虚拟控制台中打印:

CullVisitor::apply(Geode&) detected NaN,
    depth=nan, center=(0 0 0),
    matrix={
        -1 0 0 0
        0 0 1 0
        0 1 0 0
        -nan -nan -nan -nan
}

它有时可以工作的原因和其他时间没有可能是立方体随机定位,有些位置显然不起作用 .

问题是:它是什么意思,我该如何避免呢?

注意:你可能会想要立即对这个问题进行投票,但请注意,谷歌只提供了无用的结果,除了寻求帮助外,我认为无法解决这个问题 .

2 回答

  • 0

    关键是视图矩阵未正确初始化 .

    执行检查,如果视图矩阵无效,则用身份矩阵替换它:

    // if the view matrix is invalid (NaN), use the identity
    osg::ref_ptr<osg::Camera> camera = _viewer->getCamera();
    if (camera->getViewMatrix().isNaN())
        camera->setViewMatrix(osg::Matrix::identity());
    
  • 0

    您是否在代码中搜索了常见的嫌疑人名单?

    见:http://en.wikipedia.org/wiki/NaN#Operations_generating_NaN

    您也可能在对象完全初始化之前尝试剔除场景(还没有位置) - 修复将是在您初始化它之前不将其添加到场景中 . 但我们真的只是猜测,除非你发布一些相关的代码 .

相关问题