首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么一个软件在通过UDP (python)接收来自另一个软件的数据时会放慢速度?

为什么一个软件在通过UDP (python)接收来自另一个软件的数据时会放慢速度?
EN

Stack Overflow用户
提问于 2016-12-20 18:00:05
回答 1查看 169关注 0票数 0

我不断发送一个相机的位置矩阵,通过UDP从胡迪尼,并设置在Cinema4d。两者都是三维软件程序.数据发送得很好,但是Cinema4d冻结了,并且在从houdini更新矩阵时速度很慢。为什么会发生这种情况?

这里是我从Houdini发送的python代码:

代码语言:javascript
运行
复制
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接收器4d:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2017-01-06 17:51:22

因此,我想出了办法,我只需将矩阵设置插入一个while循环中,这个循环在5次尝试后就会死掉,这样cinema4d就不会崩溃,然后在电影院中用一行代码更新视口,每次矩阵在最后更新时都会刷新这个窗口。

def main():

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41248560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档