Deciding if Panda3D is for me.


I’ve decided that I need to move on to a more modern engine to get what I need. In the process, I’ve decided to start a much more complex project. I’ve narrowed things down to Blender, Crystalspace & Panda3D. The problem is, I don’t have time to learn three engines just to decide which one is best for me.

So I’d like to simply ask if these features would be available to me via Python scripting without having to recompile Panda’s source:
Read/write data to/from an external database as strings in the game script
Define my own model frame sequences for use by the scripting language
Allow user control to be moved to other objects - like vehicles, etc
Define my own player classes
Control over gravity

If I know those things are possible, I can trudge through on my own and get started.


This is provided by Python.

I didn’t play with all of these, but I think you won’t have problems with these aspects.

I’d suggest you start by reading the first few pages of the manual. There all your questions are answered and explained by topic. Also in the beginning of the manual you have a small sample, where you’ll get a feeling of coding with Panda.
At least basic Python skills are very helpful, btw. In case you never coded anything in Python, I’d suggest you first make some online tutorials on that. There are a lot of free and good ones.

Have a nice day

Hey hey,

In my entirely personal opinion, I’ve found Blender to be really, really, really heavy GPU wise, and wayyy too much for my projects. (I program for netbooks as targets though)
I looked a crystalspace, it looked to low-level IMO.
(and I’m happy with Panda3d, if that’s any help)

Of course, there are many python database API’s that you could use… mysqldb, sqlite, etc, you could even make your own decently easy… also python has a socket API if you wanted to get really into it :smiley:

I dunno what you’re asking entirely here (I’m less experienced in the modeling category) if I’m correct your asking if you can dynamically create actors at runtime, if so I believe the answer is yes, and you can ‘form’ meshes with shape keys (I could be totally wrong on this so wait for someone else’s more experienced answer)

I find Panda3D handles this amazingly, you can ‘attach’ the camera to anything you’d like, and there are many, both easy and advanced ways to do it. All of which will make it looks really nice :wink: and making your game look nice is what it’s all about, roooight?

Of course, you can make your owner class for everything, and python is an OO langauge (object oriented), so you can have a class for your player controller, your hummer controller, your apache helicopter controller, heck you could make a class for everything if you’d like :wink:
(Panda3d was designed for MMO’s, so object oriented is what it really specializes in I think :wink:)
Oh and gravity: you can have the gravity controlled by something automatically, and change it as you want (if you want to change the gravity at runtime) or you can make your own gravity with the collision system (really easy too, with the physics engine and speed velocities and stuffs :smiley:)

If you already know some python, be sure to check out the manual or example programs (and the samples in the Code Snippets forums)
They’ll help you heaps.

Hope this helps, have a good one.


It so happens that I have some experience with CrystalSpace, which I’ve used before moving to Panda (and staying, which probably says much about both).

On a side note, I don’t see any point in using Blender as a game engine, especially for a serious project, from the game engine feature set standpoint. But maybe that’s just bias because I think of Blender as a graphics/level editor rather than anything else. One thing’s for sure – it’s not the most scalable and not the most efficient solution.

Going back to Panda and CrystalSpace. I’ve used CrystalSpace for quite some time. I’ve started a project there, which I rewrote to Panda and have been developing it here since.

In general, I see Panda as more reliable and stable. Both engines have fantastic and helpful communities, but Panda has a more stable release cycle, as well as faster response to bug reports. Also, I’ve found Panda to be much better documented, especially if one wants to use Python.

Although Python can be used with CrystalSpace (and CEL, which is what actually makes CS, the rendering engine, a game engine) it felt rather rough. Unlike Panda, which was designed from the ground up to be used with Python, CS/CEL was initially meant to be operated using a combination of C++ and XML. This leads to using Python in much less “pythonic” ways than it should be used, because the python-side API is much less mature.

So if you want to use Python (and I see no reason why you wouldn’t), then Panda is the obvious route.

As far as physics is concerned, both engines support the ODE physics engine out of the box. For more robust physics solutions, Panda allows easy integration with PhysX (but it’s incomplete) while CrystalSpace support Bullet out of the box. I have no idea about the state of Bullet integration into CS, but I remember the documentation was lacking in this regard. Dunno if it still is.

Panda has a much better mechanics for in-game animations (for so-called “scripted sequences”, like in-engine cut-scenes and stuff). It’s the Interval/Sequence/Parallel system and I found it to be extremely easy to use and incredibly flexible. Dunno, maybe CrystalSpace had something similar, but if it did, I never managed to find it (documentation?) and needed to write 10 lines to do what Panda does with 1.

As far as “user control” (and I hope I got that one right), there are no constraints here. In neither engine. You, as the programmer, decide what the player’s input controls, not the engine. In fact, there’s even no such concept as “the player/the user” internally. You can attach the camera and input to anything and reattach it on the run as needed, there are no limits.

Oh, one more thing. With CrystalSpace you will probably need to build the engine from source. While there are binaries (as far as I can see) for CELStart, which is all you need to code a game in CS/CEL, the Panda’s support in this regard is unbeatable. Not only are there windows, linux (in distro-specific packages) and mac binaries for stable versions, but there are development version builds as well (which is more important than you might think).

So, to sum it all up, in general, I find Panda to be a much more complete and developer-friendly engine. That’s just what I can say from my experience with both.

Thanks for all the replies!

The reason I’m asking about the model frames is because I, (am not a veteran modeller), want to be able to define my own frame sets in the model and then let the game logic decide when to use them. In other words, I want to be able to implement more than the standard run, walk, punch, shoot frames and use them based on whatever criteria in the game I want. For example, sitting frames based on the vehicle the player might use - cars vs motorcycles vs horses, etc.

By the way - is it possible to do things like rescale instantiated models, or do you have to re-instantiate a new one for a different size?

As far as the Python goes, I’ve never coded it, but that shouldn’t be a problem. I haven’t dealt heavily with classes in a while, but I’m quite familiar with C++, Java & PHP. So the Python shouldn’t be an issue. But I was planning on starting from scratch anyway, making some little sample projects to learn with.

Thanks for all the info!

Yes, you can load animations (one for each different mode if you like) and play, stop, pause, and loop them at your desire.

There’s no limitation in this category, trust me :wink:

P.S.(I think most of us, at least me, thought you where saying build animations by the program, outside of a 3d modeling tool :smiley:)

I think you’ll really like panda :smiley: By default there are no objects or 3d objects within the window, you get to add whichever ones you like. Once you load one and place it in the window, you can move it x,y,z or slowly move it around as well. You can also set the scale of the object while the game is running too :wink:

You will definitely love python, as a note though: always have the thought in your head that it’s easier to do in python than you’d think :wink: that’s where lots of fellows I know get confused, they try to do something complex for something simple (ie no declaration: “int a = 10;”, it’s simply “a = 10”) so yeah :smiley:

Yeppers, have a good one!

Thanks Powerpup.

I’m going through the manual now. Yeah, it looks like Python acts a lot like PHP - there’s a lot of implicit type casting going on.

By the way, how simple is it to take all my python files and resources and bundle them into a standalone package?

Also - it looks like I can develop in Linux, then simply copy my resources and python files to another platform and not have to modify anything. Is that so?

This is starting to look too good to be true… :wink:


This is true, however python is much faster in some respects, in one aspect you could say it’s like Java, in the fact that compiles into bytecode that the interpreter understands… whereas PHP is more like *nix bash scripts that never really ‘compile’ into more efficient stuff :wink:

For panda3d or for python? both have ways to distribute things, for general python you can ‘freeze’ scripts into binaries (and nobody has to install python to run your program)
that is less compatible with panda3d, and panda3d has nicer ones IMO.
In panda3d you get two options: The web, or an installer.

The installer is pretty nice cause it makes an regular windows installer for you automatically with your text and artwork and it’ll install your game on someone’s computer much like any other game today. I think it also works with *nix/mac aswell (dunno how it handles these though, never played with it that much)

now the funner and more amazing options, you can have your users download the panda3d runtime plugin ( and they can enjoy rich 3d content embeded right in their web browsers, much like Flash or java applets are embedded in the web.

Also, this way your python program has full access to javascript, and javascript can also access your python code (only the parts you allow it to for security reasons, obviously nobody wants javascript hacks >:D)

It’s also pretty neat cause much like the rest of python (unless you’re doing OS-dependant things, or using some modules built in C/C++) it’s cross platform.

You probably understood alot of this from the above, however I’ll answer it anyway, in most cases yes. If you’re making system calls or something funny like that, then it’ll probably crash or have unexpected behavior, though for general games it’ll work most the time. I suggest hopping on a windows machine and making sure it works, before you advertise that it does to your co-workers though…


Yes there are tools (packp3d, pdeploy) which allow you to do this, and these are simple (only a command to invoke, I can’t think these simpler).

But there are also more powerful tools, which allow you to deploy your applications using packages or via the web.

On the manual there is a section called “Distributing Panda3D Applications” which illustrates these. As you can see Panda doesn’t left you alone during the deploying phase (that could be a terrific phase).

Yes, Panda is cross-platform, and the deployment tools cited above too. So you can develop on your machine and obtain installers, executables and applets ready to be launched on various platforms. But be careful: if you don’t want to break this property you must avoid platform-specific code in your programs (but this is obvious and this doesn’t depend on Panda).

Yes, I confirm, I regularly build installers for Linux and Mac too. You’ve to specify the target platforms to pdeploy using the switch -P. That’s all.

Oh, so I don’t even have to develop on that platform? Wow.

I have both GNU/Linux and Windows installed and switch often. Having my code in a github repository makes it quite easy to simply switch the computer and go on with coding :slight_smile:

Only thing you have to keep in mind is using OS-independent path functions in Python. Panda utilizes unix-style paths everythere, but other Python modules don’t.