2016-12-20 2 views
0

Я постоянно отправляю матрицу положения камеры через UDP от Houdini и устанавливаю ее в Cinema4d. Оба являются трехмерными программами. Данные посылаются отлично, но Cinema4d зависает и замедляется при обновлении матрицы из houdini. Почему это происходит?Почему одно программное обеспечение замедляется при получении данных от другого через UDP (python)?

здесь питон код я шлю от Гудини:

import socket 

UDP_IP = '192.168.1.8' 
UDP_PORT = 7864 

cam = hou.selectedNodes() 
camerac4d = hou.node('/obj/obj_andcamera/cam1') 
xform = camerac4d.worldTransform() #get the camera matrix 
data_string = str(xform) 

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP 
sock.sendto(data_string, (UDP_IP, UDP_PORT)) 

UDP приемник в Cinema 4D:

import socket 

def main(): 
    operateon = doc.SearchObject('Camera') #get cinema 4d camera 

    UDP_IP = '192.168.1.8' 
    UDP_PORT = 7864 

    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    sock.bind((UDP_IP,UDP_PORT)) 
    data_string,addr = sock.recvfrom(1024) 


    data_string = ast.literal_eval(data_string) #converts string list 


    #set houdini matrix to cinema 4d camera 

    off = v(newlist[3][0],newlist[3][1], -newlist[3][2]) 
    v1 = v(-newlist[0][0],newlist[0][1], newlist[0][2]) 
    v2 = v(-newlist[1][0], -newlist[1][1], -newlist[1][2]) 
    v3 = v(-newlist[2][0], -newlist[2][1], newlist[2][2]) 

    mat = c4d.Matrix(off,v1*-1,v2*-1,v3) 

    newpos = operateon.SetMg(mat) 

ответ

0

так я понял это я просто должен был придерживаться установка матрицы в цикле while, которая умерла после 5 попыток, так что movie4d не будет разбиваться, а затем должен был обновить видовое окно в кинотеатре с помощью строки кода, которая обновляет окно просмотра каждый раз, когда матрица обновляется при t он конец

Защиту основной():

operateon = doc.SearchObject('Camera') #find and set the cinema camera 

##UDP receive transformation matrix from houdini## 

UDP_IP = 'localhost' 
UDP_PORT = 7864 

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 

sock.bind((UDP_IP,UDP_PORT)) 
##kill the connection after 5 viewport updates/works but stupid/but it stops cinema from freezing on an endless while loop 
die = 0 
while die < 5: 
    die += 1 
    data_string, addr = sock.recvfrom(1024) 

# set each vector component 
    data_string = ast.literal_eval(data_string) #converts string to list 

    #a hou matrix is 4x4, cinema is a 3x4 matrix consisting of :off=position data, v1,v2,v3 stores the scale,rotation and shear 
    index = 3 #Delete column 3 
    newlist = [ (x[0:index] + x[index+1:]) for x in data_string] 
#print newlist 
#---------------------set vectors for matrix---------------------------------# 
    off = v(newlist[3][0],newlist[3][1], -newlist[3][2]) 
    v1 = v(-newlist[0][0],newlist[0][1], newlist[0][2]) 
    v2 = v(-newlist[1][0], -newlist[1][1], -newlist[1][2]) 
    v3 = v(-newlist[2][0], -newlist[2][1], newlist[2][2]) 

#---------------------create a matrix and set it---------------------------------# 

    mat = c4d.Matrix(off,v1*-1,v2*-1,v3) 
    newpos = operateon.SetMg(mat) 


    #update the viewport with the new matrix 
    c4d.EventAdd() 
    c4d.DrawViews(c4d.DRAWFLAGS_ONLY_ACTIVE_VIEW|c4d.DRAWFLAGS_NO_THREAD|c4d.DRAWFLAGS_NO_REDUCTION|c4d.DRAWFLAGS_STATICBREAK) 
Смежные вопросы