The right, the forward, and up, so what I am trying to do is bypass the headsUp for tilting my character to the HPR of the surface normal because for some reason the heads up is not working properly or like I want it to, so I want to take a more controlled approach.
self.pactor.headsUp(self.pactor, Point3(0, 1, 0), self.surf)
camup = self.pactor.getQuat(self.render).getUp()
camfwd = camup.cross(self.mvtVec)
resPos = self.pactor.getPos(self.render)
self.pactor.setMat(Mat3(self.mvtVec, camfwd, camup))
Looking at the code above, I let the headsUp do it’s thing, then obtain the character’s up vector, the right vector is made from a HPR conversion of the camera and character HPR elsewhere, while the forward vector is a cross between the right and up.
This way the Up is obtained actually while the forward and right are formulated by the player’s movement, because it seems that the headsUp also effects the H to achieve the surface conformity, but with the player also manipulating the H, it is causing the player to fly off the surface.
Edit: it turns out self.mvtVec starts out as Vec3(0, 0, 0) when the game boots up and does not change until movement is made, it seems setMat() does not like a all zero vector, so included a 1 in it and it worked, but it still did not give me the result I want, but rbd you did solve the topic, so I will mark your post as the solution and make a another topic better explaining my situation, thank you vary much for the help