James, The most obvious problem: Group::traverse ... Is one of the visitors you use a TRAVERSE_ALL_CHILDREN visitor? If so, the Group::traverse profile makes sense. Make sure that you do traverse only this subgraphps you need to traverse. You can then minimize that calls too. Will help overall!!!
Ok, so the PositionAttitudeTransform is the matrix multiplication problem. Try that specialized transform patch I have sent to you. That will help a bit here. But you might do even better: You are talking about a game. So I expect that you have transform nodes to animate parts of the scenegraph. I agree that you will need the full PositionAttitudeTransform in some cases. But I can well imagine to have special transforms in such a game where you can make use of specialized implementations. Specialized with respect to: * The kind of the transform. Often you just have to rotate around the origin. Nothing more. Or you might have some linear transform to make something move but no rotation and no scaling. For this case implement you own say LinearTransform or RotationTransform nodes derived from osg::Transform and reimplement the the computeLocalToWorldMatrix and computeWorldToLocalMatrix and computeBound methods with something more optimized. May be use that specialized preMultTranslate or equivalent methods from the patch I sent. You can avoid many matrix multiplications for that. * Recomputation of the bounding sphere. Sometimes with such special transforms, you do not need to dirty the bounding sphere. Take a rotation. Say you have a leg that can rotate around the knee. Just compute the bounding sphere for all possible rotation values of that rotation. With that you will have slightly worse bounding spheres, but You do not need to walk large scenegraphs to invalidate the bound and you do not need to recompute the bound for large parts of the scene again and again. If you have a human body for example with many transform nodes for arms legs and fingers and so on. Your human body bounding sphere will not be much larger with that kind of bounding box compared to the exact case. The interresting cull case is to cull away the *whole* human body which will happen about the same as with the exact bounding spheres. Translations along an axis for example are a bit more difficult in this case since they would blow up the sphere to infinity if you want to catch any translation value. But if you have a translation axis, a maximum scalar value a minimum scalar value and a current scalar translation value, you can do about the same. Hope this helps. Greetings Mathais -- Dr. Mathias Fröhlich, science + computing ag, Software Solutions Hagellocher Weg 71-75, D-72070 Tuebingen, Germany Phone: +49 7071 9457-268, Fax: +49 7071 9457-511 -- Vorstand/Board of Management: Dr. Bernd Finkbeiner, Dr. Florian Geyer, Dr. Roland Niemeier, Dr. Arno Steitz, Dr. Ingrid Zech Vorsitzender des Aufsichtsrats/ Chairman of the Supervisory Board: Prof. Dr. Hanns Ruder Sitz/Registered Office: Tuebingen Registergericht/Registration Court: Stuttgart Registernummer/Commercial Register No.: HRB 382196 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org