Hello,
As part of a class project, my group and I would like to rotate a planet on a fixed point with keyboard keys.
We know how to code in python and we have looked at the 3d panda tutorials but we are stuck on the rotation.
The planet rotates on itself (Z axis) and we can move it but it doesn’t rotate with respect to X and Y.
Can you give us a clue, a path to explore or a solution that could help us?
from math import *
from panda3d.core import loadPrcFile, loadPrcFileData, AmbientLight, VBase4, Vec4, Vec3, DirectionalLight
loadPrcFile(“config/conf.prc”)
from direct.showbase.ShowBase import ShowBase
“”"
obj2egg pythonPrograms/ModelsProps/Arbre1.obj pythonPrograms/ModelsProps/Arbre1.egg
“”"
loadPrcFileData("", “load-file-type p3assimp”) #Pour pouvoir importer correctement des fichiers .obj
keyMap = {
"up" : False,
"down" : False,
"left" : False,
"right" : False,
"rotate" : False}
#callback fonction to update the keyMap
def updateKeyMap(key, state):
keyMap[key] = state
#Pour démarrer l’écran d’affichage
class Game(ShowBase):
def __init__(self):
super().__init__()
self.cam.setPos(0,-20,0)
#self.disableMouse() # Disables the default camera control
self.planete = self.loader.load_model("ModelsProps/Main2.glb", )
self.planete.setPos(0, 0, -6)
self.planete.setHpr(0,0,0)
self.planete.setScale(0.70)
self.planete.reparent_to(self.render) # Connexion à la racine render du graph
dt = globalClock.getDt()
print(dt)
ambientLight = AmbientLight("ambient light")
ambientLight.setColor(Vec4(0.2, 0.2, 0.2, 1))
self.ambientLightNodePath = render.attachNewNode(ambientLight)
render.setLight(self.ambientLightNodePath)
mainLight = DirectionalLight("main light")
mainLight.setColor(Vec4(1, 233/255, 145/255, 1))
self.mainLightNodePath = render.attachNewNode(mainLight)
self.mainLightNodePath.setHpr(45, -45, 0)
render.setLight(self.mainLightNodePath)
SideLight = DirectionalLight("Side light 1")
SideLight.setColor(Vec4(117/255, 7/255, 74/255, 1))
self.SideLightNodePath = render.attachNewNode(SideLight)
self.SideLightNodePath.setPos(-30, -30, -30)
self.SideLightNodePath.setHpr(225, 45, 0)
render.setLight(self.SideLightNodePath)
self.speed = 4
self.angle = 0
#self.taskMgr.add(self.tourne, "tourne")
self.taskMgr.add(self.update, "update")
self.accept("z", updateKeyMap, ["up", True])
self.accept("z-up", updateKeyMap, ["up", False])
self.accept("s", updateKeyMap, ["down", True])
self.accept("s-up", updateKeyMap, ["down", False])
self.accept("q", updateKeyMap, ["left", True])
self.accept("q-up", updateKeyMap, ["left", False])
self.accept("d", updateKeyMap, ["right", True])
self.accept("d-up", updateKeyMap, ["right", False])
self.accept("space", updateKeyMap, ["rotate", True])
self.accept("space-up", updateKeyMap, ["rotate", False])
def update(self, task):
dt = globalClock.getDt()
pos = self.planete.getPos()
if keyMap["left"]:
pos.x -= self.speed * dt
if keyMap["right"]:
pos.x += self.speed * dt
if keyMap["up"]:
pos.z += self.speed * dt
if keyMap["down"]:
pos.z -= self.speed * dt
if keyMap["rotate"]:
self.angle += 1
self.planete.setH(self.angle)
self.planete.setPos(pos)
return task.cont
game = Game()
“”"
for i in range (-360,361):
print("rang", i, ":", game.sinDroit(i))
“”"
game.run()