3D Graphics with Python Made Easy with Panda3D

Aleena Martin on December 2, 2024

3D Graphics with Python - Learn easy steps in creating 3D graphics.

Introduction

Have you ever wondered how the movie ‘Avatar’ was created with all the inbuilt 3D graphics? And ever imagined if you could create the same too? Well, you have reached the right page to learn to create 3D graphics by yourself! If you’re a fan of games and animations, learning 3D graphics  would be an exciting journey for you with Python Programming

In this article, we will walk through how to set up graphics with Panda3D, create a basic 3D scene, and explore the world of 3D programming.

What is Panda3D?

Panda3D is a game engine that helps developers create 3D applications using Python. It’s perfect for beginners because it’s easy to use and has a lot of built-in features for 3D graphics, physics, and sound.

Step by Step Guide

Step 1: Installing Panda3D

Before we begin, we need to install Panda3D. Once installed, you’re ready to start creating your first 3D scene!

Step 2: Setting Up a Basic 3D Scene

The first thing you’ll do in Panda3D is set up a 3D window where your scene will be displayed. This is called the render window. We’ll also add a simple object (like a cube or a sphere) to the scene.

Here’s how to create a basic 3D scene with a rotating cube:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import Point3

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
       
        # Load a cube model
        self.cube = self.loader.loadModel(“models/box”)
        self.cube.reparentTo(self.render)
       
        # Position the cube
        self.cube.setPos(Point3(0, 10, 0))
       
        # Rotate the cube over time
        self.taskMgr.add(self.spin_cube, “spinCubeTask”)
   
    def spin_cube(self, task):
        angle = task.time * 60
        self.cube.setHpr(angle, angle, angle)
        return task.cont

app = MyApp()
app.run()

 

In this code:

  • We create a basic ShowBase class, which is the foundation of any Panda3D application.
  • We load a cube model and position it in the 3D space.
  • We rotate the cube over time using a task manager that updates the cube’s position every frame.

Step 3: Understanding 3D Coordinates

In Panda3D (and most 3D engines), the 3D world is represented by coordinates (X, Y, Z). Here’s a quick breakdown:

  • X-axis: Left and right movement.
  • Y-axis: Forward and backward movement.
  • Z-axis: Up and down movement.

When you position objects in the 3D world, you’ll use these coordinates to move them around.

Step 4: Adding Lights to the Scene

To make your 3D objects look more realistic, you need to add lighting to your scene. Panda3D allows you to add different types of lights, like directional lights and point lights.

Here’s how to add a simple directional light to your scene:

from panda3d.core import DirectionalLight

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
       
        # Load a cube model
        self.cube = self.loader.loadModel(“models/box”)
        self.cube.reparentTo(self.render)
        self.cube.setPos(Point3(0, 10, 0))
       
        # Add a directional light
        self.light = DirectionalLight(“myLight”)
        self.light_node = self.render.attachNewNode(self.light)
        self.light_node.setPos(0, 0, 10)
        self.render.setLight(self.light_node)

        # Rotate the cube
        self.taskMgr.add(self.spin_cube, “spinCubeTask”)
   
    def spin_cube(self, task):
        angle = task.time * 60
        self.cube.setHpr(angle, angle, angle)
        return task.cont

app = MyApp()
app.run()

 

The light in this example is coming from above the cube, and it illuminates the object as it rotates.

 

Step 5: Loading and Texturing 3D Models

In Panda3D, you can load and display 3D models using simple commands. Models are typically created in 3D modeling software like Blender, but Panda3D comes with a few models to get you started.

You can load models using the loader object, and you can add textures to those models to make them look more realistic. Here’s how you can load a 3D model and add a texture:

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
       
        # Load a 3D model
        self.model = self.loader.loadModel(“models/panda”)
        self.model.reparentTo(self.render)
        self.model.setScale(0.5)
        self.model.setPos(0, 10, 0)

        # Load a texture
        self.texture = self.loader.loadTexture(“textures/panda_texture.png”)
        self.model.setTexture(self.texture)

 

Step 6: Moving the Camera

The camera in Panda3D determines what part of the 3D world you can see. You can move the camera around to get different views of your scene.

Here’s how you can position the camera:

# Move the camera to a new position
self.camera.setPos(0, –20, 5)
self.camera.lookAt(self.cube)  # Make the camera look at the cube

 

Step 7: Adding Interactivity

You can also add interactivity to your Panda3D scenes, like responding to keyboard input or mouse clicks. For example, you can move an object when a key is pressed.

self.accept(“arrow_left”, self.move_left)

def move_left(self):
    self.cube.setPos(self.cube.getX() – 1, self.cube.getY(), self.cube.getZ())

 

Conclusion

Panda3D is an excellent tool for creating 3D graphics and games with Python. It’s easy to use, and with just a few lines of code, you can create stunning 3D scenes. Whether you’re building simple projects or large-scale games, Panda3D provides all the tools you need to bring your ideas to life.

Jump right on to code camps for kids, where your kids learn to adapt to the digital world of coding through simple and fun learning experiences! Let them join their first trial class today!

Encourage learning everywhere you go and have fun with your coding journey!

Sign up to our newsletter

Get the latest blogs, articles, and updates delivered straight to your inbox.

Share with your friends

Try a free class