|
我试用一个类来管理渲染的内容,其中需要读入模型文件。因为都是用同一个模型文件,故:
static osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("aa.osg");
pGroup->addChild(model);//pGroup是类的成员变量,渲染管理的类根节点
因为场景管理需要多次创建这个类的对象实例,再删除。但是当多次new再delete时内存就会涨的离谱,cpu的占用只有15%但场景会卡的拖不动。
我把模型文件换成最简单的一个球体都不行,如下
// aa.osg
Geode {
nodeMask 0xffffffff
cullingActive TRUE
num_drawables 1
ShapeDrawable {
Sphere {
Center 0 0 0
Radius 1
}
useDisplayList FALSE
useVertexBufferObjects TRUE
color 0 1 1 1
}
}
但是如果不使用模型文件
直接画个球体则没有这种问题。
代码如下:
static osg::ref_ptr<osg::Geode> model = new osg::Geode;
model->addDrawable(new osg::ShapeDrawable(new Sphere(osg::Vec3(0.0,0.0,0.0),1)));
我肯定需要载入模型文件,而不能用简单球体代替,应该怎么让类管理模型文件才合理呢?
另外一个问题,当我的内存就涨的离谱,cpu的占用只有15%但场景会卡的拖不动时候如果继续运行程序经常会出现所有渲染的内容黑屏都不见了,调试信息会如下:
CullVisitor::apply(Geode&) detected NaN,
depth=1.#QNAN, center=(1.#INF 1.#INF -1.#INF),
matrix={
-0.907168024754669 -0.0647062750557697 -0.415763481839279 0
-0.420768552606671 0.139505348651275 0.896377198970932 0
-9.98766902515769e-011 0.988104931505806 -0.153781157278474 0
-1002070.78245605 -3928486.25385359 -21529922.9896044 1
}
CullVisitor::apply(Geode&) detected NaN,
depth=1.#QNAN, center=(-127.205947875977 62.9670677185059 -87.7353591918945
,
matrix={
-1.#IND -1.#IND -1.#IND -1.#IND
-1.#IND -1.#IND -1.#IND -1.#IND
-1.#IND -1.#IND -1.#IND -1.#IND
-1.#IND -1.#IND -1.#IND -1.#IND
}
CullVisitor::apply(Geode&) detected NaN,
depth=1.#QNAN, center=(-1340424.75 -1.#IND 3584658),
matrix={
-0.935598770511473 -0.00722078523889849 -0.352991219264662 0
-0.353065065699538 0.0191345971266103 0.935403082406394 0
2.77555756156289e-017 0.999790841853103 -0.0204517125606629 0
-970295.520319227 -4027010.53137235 -16840189.5548042 1
}
这可能是由于什么原因引起的呢?
请各位高手不吝赐教,帮我分析分析上面两个问题。谢谢 |
|