What is a Point Object in 3ds max?

I am trying to save certain coordinate positions in my level. The documentation for the 3ds max plugin says:

“Also included in this update is the ability to use Point Objects as locators (similar to Maya’s locators).”

What is a Point Object in 3ds max, and how do I create one so that I can preserve the positions in my exported egg?

At the moment all my egg exports are missing the Transform entry. I see just Vertex and Polygon under the Group.

I think it should be a Dummy type Helper (create->helpers->dummy). A bone could work or a tiny triangle if all else fails (can be set to hidden in the egg file so it won’t render).

The max exporter likes to bake transforms into vertex position, but I do see the transform entry from time to time, not sure when or why (for actors mayhaps?). Thing.getPos(render) is a good way to get a useable position (unless you do something fancy).

Another cool trick is to write down the pos from max on a piece of paper/txt file/clipboard and then reuse it in your code. 1max unit =1 panda unit.

After a quick test I must say I was wrong.

A “Point Object” is in fact a Point Helper (create->helpers->point). It gets exported as a named group with a Matrix4 transform.

A bone gets exported as a joint, but unless you export it as a ‘model’(actor) it has no position or orientation.

Dummies, lines and lights do not get exported… and to my surprise a mesh/polygon with just one vertex gets exported just like a Point helper, but the transform matrix gets the objects’ pivot, not the position/rotation of the lone vertex.

Not sure how the loader reacts to such elements.

I tried a simple test: create a box and a helper Point. Both are exported with “Model” button selected and “Export entire scene”.

I see the Point group, but it is empty. The Box has its Vertex and Polygon entries. The Transform entry is still no where to be seen.

Do I have to do something special to the Point helper before exporting?

‘Model’ = animated actor (for loading via Actor)
If it’s a model… em, bad word… if it’s a mesh/polygon that’s not rigged with any bones or biped systems, then you should use the ‘static’ export option.

If it is an actor/model - use bones as placeholders.

Thanks for your help. Exporting as “Static” did the trick.

However, there seems to be one last problem:

The level mesh has the User Defined Properties for collision set:

polyset = 1
descend = 1

If I export this mesh and the helper Points as “Static”, then the following code:

self.level = loader.loadModel(“level3”)
print self.level.ls()

Will print out the following:

ModelRoot level3.egg
PandaNode
CollisionNode level3p1 (40946 solids) (hidden)
PandaNode bed T:m(pos -583.343 78.2785 885.276)
PandaNode spawn T:m(pos -583.343 78.2785 1385.27)
None

The result is that I cannot see this mesh at all. It is hidden in the pview and in the panda3D window.

However, if I remove both lines in User Defined Properties and then export it with “Static”, I get this:

ModelRoot level3.egg
PandaNode
GeomNode level3p1 (1 geoms)
PandaNode weapondrop T:m(pos -583.343 78.2785 885.276)
PandaNode spawn T:m(pos -583.343 78.2785 1385.27)
None

And I can see the level mesh.

I understand that CollisionNodes are by default hidden, but I need to visualize the level in the game. Should I get rid of the User Defined Properties? It is unclear to me if those properties which generates a CollisionNode are needed for only Panda3D’s internal physics engine, or if the other physics engines can utilize it (like Bullet).

If it’s only used for Panda3D’s internal physics engine, I’m still a bit curious as how one would show the level mesh properly? I know there is a show() which will show the CollisionNode, but that is for debugging purposes and is likely improper if one wants to put the game in production.

I’m guessing that since there are two worlds we have to maintain: physics and scenegraph, the 3ds max exporter will export the mesh as a collision mesh IF I have specified the user defined properties.

That means I will need two egg files: one that holds the collision mesh (attached to the physics world), and another which will be the visible geom in the game (attached to the scenegraph).

I remember reading about how you can’t mix collision shapes from panda3d’s physics engine with collision shapes from other physics engines like Bullet.

Then, does this mean that defining the user properties in 3ds Max is pointless if I want to use Bullet rather than panda’s built-in physics engine? In other words, is the CollisionNode created not usable in Bullet?

If you want to use Bullet then taging objects in max is pointles.
You can have the visible geometry and the collisions in one file, but you would need to tell Bullet what geoms are for the collisions and hide them so they don’t get rendered. Nothing to gain here, I’d use 2 files…unless you use the same objects for rendering and physics.

Mind that I’ve never used Bullet (my signatures is true, not just a Zappa quote).