Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Aislan Silva Costa

Rotacionar objeto na Blender Game Engine

Recommended Posts

Tenho o seguinte script num controlador python na BGE

    import serial #Comunicacion Serial
    import bge #Funciones propias de blender
    import bpy
    import math
    from bpy.props import *
    from mathutils import Vector


    ser = serial.Serial('COM5', baudrate = 9600, timeout = 1)

  
    leitura = ser.readline() 
    leitura = leitura.decode("utf_8") 


    if leitura[0] == "&" :

    leitura = leitura[1:] #Eliminamos el detector de errores
    leitura = leitura[:-1] #Eliminamos el final de linea

    angulo = math.radians(int(leitura))

    cont = bge.logic.getCurrentController()
    leme = cont.owner  

    rotation = leme.localOrientation.to_euler()

    rotacao_atual = rotation.y * -1


    if (rotacao_atual != angulo):
     if (rotacao_atual > angulo):
      leme.applyRotation([0,0.1, 0],1)
    else:
      leme.applyRotation([0,-0.1, 0],1)
    else:
      leme.applyRotation([0, 0, 0],True)        

      ser.close()
 


Sua função e ler um valor recebido de uma conexao serial, decodifica-lo e depois converter seu valor inteiro em radianos. Leio a rotação atual do meu objeto depois faço a logica para que o objeto rotacione até o angulo desejado. Em termos o codigo funciona, o problema e que aparentemente o objeto não rotaciona de 0 a 360 graus.

Exemplo, se meu angulo é de 180 graus, e a rotação atual e 0 graus, o applyRotation fica incrementando de 0.1 radios no objeto mas só até 2.60 radianos, depois desse valor retorna para 0 radianos e vai diminindo, depois sobe até 2.60 de novo e fica num loop infinito, alguém sabe o porque disso?


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.