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, valor
0, 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, valor
0, 0.0, 1)
GameLogic
?.addActiveActuator(move,1)