imprimir

Recebendo sinais OSC no Blender


voltar para OSC

Para entender melhor esta página, é bom dar uma olhada na Introdução ao script no blender.

Vamos aqui trabalhar com o mesmo script que fizemos na Introdução ao script no blender, mas ao invés de enviarmos sempre o sinal "1" para o deslocamento do nosso objeto, vamo mandar um sinal que vai ser recebido via OSC, que pode vir de qualquer lugar que consiga enviar sinais OSC.

Retomando, o script era assim:


cont=GameLogic.getCurrentController()
move = cont.getActuator("act")
move.setDLoc(0.0, 1, 0.0, 1)
GameLogic?.addActiveActuator(move,1)


Primeiramente, vamos acrescentar as bibliotecas necessárias para o python trabalhar com OSC. No início do script acrescente:


import socket
import OSC


É necessário verificar se você tem essas bibliotecas no seu sistema.


$ls /usr/lib/python2.4/OSC.py
/usr/lib/python2.4/OSC.py
$/usr/lib/python2.4/socket.py
/usr/lib/python2.4/socket.py

substitua 2.4 pela versão do python que você está usando. Para saber a versão, rode:
#python -V


Se você não estiver com essas bibliotecas no seu sistema, faça download dos arquivos e coloque-os na sua pasta /usr/lib/python(versao)/ (ou no seu path correspondente) (em breve links confiáveis para esses arquivos, mas uma busca no google e vc acha facinho)

Bom, voltando ao script, agora que já carregamos nossas bibliotecas, vamos arescentar o que interessa:


def get_osc(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(0.5)
s.bind((host, port))
raw, addr = s.recvfrom(1024)
dec = OSC.decodeOSC(raw)
return dec


Essa é a função que retorna o valor enviado via OSC. Lembre-se que no python a identação é essencial.

Agora vamos chamar essa função para pegarmos o valor que está chegando via OSC.

valor = get_osc("localhost", 4533)


Substitua 4533 pela Porta que você quer ouvir. Agora o valor que está chegando via OSC está carregado dentro da variáve "valor", que é uma array, já que posso enviar vários valores via OSC.

Se você quiser que seu script pinte na tela do terminal os valores que está recebendo, acrescente a linha

print valor


Pronto. Agora pegamos o valor que está chegando e jogamos para o atuador, e nossas últimas linhas ficam assim: (temos que colocar o 0 porque "valor" é uma array.


move.setDLoc(0.0, valor0, 0.0, 1)
GameLogic?.addActiveActuator(move,1)



No final, nosso script completo:


import socket
import OSC
cont=GameLogic.getCurrentController()
move = cont.getActuator("act")

def get_osc(host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(0.5)
s.bind((host, port))
raw, addr = s.recvfrom(1024)
dec = OSC.decodeOSC(raw)
return dec

valor = get_osc("localhost", 4533)
print valor

move.setDLoc(0.0, valor0, 0.0, 1)
GameLogic?.addActiveActuator(move,1)

Última alteração: 19/05/2007 às 23:12, por: leogermani