Panda3D: Randomly Colored Cube Creation in Scene

  • Share this:

Code introduction


This code creates a randomly colored cube and adds it to the Panda3D scene. It uses techniques such as geometric object creation, color setting, and scene node operations in Panda3D.


Technology Stack : Panda3D, ShowBase, Geom, GeomVertexFormat, GeomVertexWriter, makeNodePath, Vec4

Code Type : The type of code

Code Difficulty :


                
                    
def create_random_cube(color, size):
    from direct.showbase.ShowBase import ShowBase
    from panda3d.core import Geom, GeomVertexFormat, GeomVertexWriter, makeNodePath
    from panda3d.core import Vec4

    class CubeApp(ShowBase):
        def __init__(self):
            ShowBase.__init__(self)
            self.create_cube(color, size)

        def create_cube(self, color, size):
            format = GeomVertexFormat.getV3c4()
            vertices = [
                (-size, -size, -size), (size, -size, -size), (size, size, -size), (-size, size, -size),
                (-size, -size, -size), (-size, size, -size), (size, size, -size), (size, -size, -size),
                (-size, -size, size), (size, -size, size), (size, size, size), (-size, size, size),
                (-size, -size, size), (-size, size, size), (size, size, size), (size, -size, size),
                (-size, -size, -size), (-size, -size, size), (-size, size, size), (-size, size, -size),
                (-size, -size, size), (-size, size, size), (size, size, size), (size, -size, size),
                (size, -size, -size), (size, -size, size), (size, size, size), (size, size, -size),
                (-size, -size, -size), (size, -size, -size), (size, size, -size), (-size, size, -size)
            ]
            colors = [
                color, color, color, color, color, color, color, color,
                color, color, color, color, color, color, color, color,
                color, color, color, color, color, color, color, color,
                color, color, color, color, color, color, color, color
            ]
            geom = Geom(format)
            vertex_writer = geom.add_vertex_writer(format.get_vertex_size())
            for i in range(0, len(vertices), 4):
                vertex_writer.add_data(vertices[i])
                vertex_writer.add_data(vertices[i+1])
                vertex_writer.add_data(vertices[i+2])
                vertex_writer.add_data(vertices[i+3])
            geom.add_color(0, color)
            geom.add_color(1, color)
            geom.add_color(2, color)
            geom.add_color(3, color)
            geom.add_color(4, color)
            geom.add_color(5, color)
            geom.add_color(6, color)
            geom.add_color(7, color)
            geom.add_color(8, color)
            geom.add_color(9, color)
            geom.add_color(10, color)
            geom.add_color(11, color)
            geom.add_color(12, color)
            geom.add_color(13, color)
            geom.add_color(14, color)
            geom.add_color(15, color)
            geom.add_color(16, color)
            geom.add_color(17, color)
            geom.add_color(18, color)
            geom.add_color(19, color)
            geom.add_color(20, color)
            geom.add_color(21, color)
            geom.add_color(22, color)
            geom.add_color(23, color)
            mesh = geom.generate_mesh()
            self.scene_node.attach_new_node(makeNodePath(mesh, "cube"))

    app = CubeApp()
    app.run()