from direct.showbase.ShowBase import ShowBasefrom panda3d.core import AmbientLight, Vec4, Vec3
class MyKeyNavApp(ShowBase):
def __init__(self): super().__init__()
# Background color self.setBackgroundColor(0.75, 0.69, 0.68)
# Model parent node (equivalent to TransformGroup) self.model_node = self.render.attachNewNode("model_node") self.model_node.setPos(0, -3, -1)
# Two model types (alternative to Switch) self.model1 = self.loader.loadModel("model/female02_pre_l_cen.obj") self.model2 = self.loader.loadModel("model/female02_ori_m_exc_h_s_fn_l_h_cen.obj")
self.model1.reparentTo(self.model_node) self.model2.reparentTo(self.model_node)
# Initial state (model2 displayed) self.model1.hide() self.model2.show()
self.models = [self.model1, self.model2] self.current_index = 1 self.count = 0
# Lighting setup self.setup_light()
# Key inputs self.accept("d", self.move_forward_fast) self.accept("s", self.move_forward_turn_left) self.accept("f", self.move_forward_turn_right) self.accept("x", self.show_model2)
def setup_light(self): ambient = AmbientLight("ambient") ambient.setColor(Vec4(0.1, 0.1, 0.1, 1)) self.render.setLight(self.render.attachNewNode(ambient))
def toggle_model(self): self.models[self.current_index].hide() self.current_index = self.count % 2 self.models[self.current_index].show()
def move_forward_fast(self): self.toggle_model()
# Move forward self.model_node.setPos(self.model_node, Vec3(0, 0.5, 0))
self.count += 1
def move_forward_turn_left(self): self.toggle_model()
# Move forward self.model_node.setPos(self.model_node, Vec3(0, 0.25, 0))
# Rotate (left) self.model_node.setH(self.model_node.getH() + 180 / 32)
self.count += 1
def move_forward_turn_right(self): self.toggle_model()
# Move forward self.model_node.setPos(self.model_node, Vec3(0, 0.25, 0))
# Rotate (right) self.model_node.setH(self.model_node.getH() - 180 / 32)
self.count += 1
def show_model2(self): self.model1.hide() self.model2.show() self.current_index = 1
app = MyKeyNavApp()app.run()