Results 1 to 1 of 1
  1. #1
    Join Date
    Jul 2014

    BGE How to align object1 local z axis to object2 local z axis and to vector?

    Good day community! I require your assistance on this one.

    You see, I've been working on this script which sets the camera to follow an object and moves around it, always focusing the object.

    Before anything else I am working on a space-planets environment game.

    This is the code I am working with (not fnished):

    import bge, math
    from bge import logic
    cont = logic.getCurrentController()
    own = cont.owner
    scene = logic.getCurrentScene()
    obj = scene.objects
    player = obj["player"]
    gd = logic.globalDict
    vectto = own.getVectTo(player)
    own.alignAxisToVect([0.0, 0.0, 1.0], 2, 0.15) # I Require help with this line
    own.alignAxisToVect(vectto[1], 1, 0.15)
    x = player.position[0] + gd["radius"] * math.cos(gd["theta"]) * math.sin(gd["phi"])
    y = player.position[1] + gd["radius"] * math.sin(gd["theta"]) * math.sin(gd["phi"])
    z = player.position[2] + gd["radius"] * math.cos(gd["phi"])
    own.position = [x, y, z]
    As you can see in the line 13 I am aligning the object's local z axis to the world's positive z axis, but that is not what I want to achieve.

    What I want to achieve are these 2 things:

    1.- Align this object (own) local z axis to the second object (player) local z axis, this to simulate space flight.

    2.- Align this object (own) local z axis to the vector from the planet to the player, this is because it walks on a planet.

    I have a second script where I calculate the vector to align the player to the planet:

    from bge import logic
    import math
    from mathutils import Vector
    cont = logic.getCurrentController()
    own = cont.owner
    scene = logic.getCurrentScene()
    for obj in scene.objects:
        if 'alignToSurface' in obj and obj['alignToSurface'] == True:
            xDist = obj.worldPosition[0] - own.worldPosition[0]
            yDist = obj.worldPosition[1] - own.worldPosition[1]
            zDist = obj.worldPosition[2] - own.worldPosition[2]
            distSquared = (xDist)**2 + (yDist)**2 + (zDist)**2
            dist = math.sqrt(distSquared)
            if dist <= 20:
                align = own.getVectTo(obj)[1]
                obj.alignAxisToVect(align, 2, 0.15)
    Last edited by Rusoski; 19-May-17 at 14:01. Reason: Missing info

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts