Article
未读前言视效制作中,在完成Camera Tracking后,可能会被告知:“素材进行了翻转处理”。然后丢给你一个镜像后的素材,并要求你重新进行Tracking。
翻转素材一般有两种情况:
基于x轴镜像
基于y轴镜像对于这样的镜头,不用重新再做一遍Tracking,只需要在Maya里进行一些处理就可以了。
这篇文章主要是讲如何让摄像机和场景物体匹配上翻转后的素材。
基本方法1.对于x轴翻转的,将摄像机的ty,rx,rz轴的数值设为其相反数。
2.对于y轴翻转的,将摄像机的tx,ry,rz轴的数值设为其相反数。
3.最后把场景中其它物体(不要摄像机)打组,以原点为中心缩放-1的数值。(如果是x轴翻转,缩放y轴;如果是y轴翻转,缩放x轴)
脚本实现上述最麻烦了的就是对摄像机进行操作,因为如果手动的去修改每一帧数值会非常繁琐。
通常这样的问题可以交给代码来处理。
1234567891011# 选择你的摄像机,运行下面的代码import pymel.core as pmcam = pm.ls(sl=1)[0]start_t = int(pm.playbackOptions(q=1, min=1) ...
Learn
未读安装在官网 https://docs.conda.io/en/latest/miniconda.html#macosx-installers 下载:
在终端里(会安装到当前目录):
12345bash Miniconda2-latest-MacOSX-x86_64.sh# 需新建Terminal Session或手动加载环境变量来使得conda生效# 手动加载source ~/.bash_profie
常用命令创建虚拟环境12# 这里djangocms为环境名称conda create -n env_name python=2.7 -y
激活以及退出虚拟环境12345678# 激活conda activate env_name# 查看环境下所有pip包pip freeze# 退出conda deactivate
列出所有存在的环境1conda-env list
删除一个已有环境1conda remove --name env_name --all
包管理123456789# 查看当前环境下已安装的包conda list# 查看某个指定环境的已安装包conda list -n ...
Learn
未读公共属性使用id()可以查看,公共属性的地址是一样的。
Dog.d_type = '藏獒' 一旦更改,其他的实例对应属性也会随之更改。
12345class Dog: d_type = '京巴' # 公共属性, 类属性, 类变量 def say_hi(self): print('hello, i am a dog, my type is ', self.d_type)
好处是可以节省内存空间。
重写父类的方法继承父类方法后,需要重写父类方法,并调用父类方法的话。
可以用到super函数
1234567891011121314151617181920212223class Animal: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def eat(self): print('%s is eating..' % self.n ...
Code
未读读取和写入json文件1234567# 写with open(json_path, 'w') as f: json.dump(self.items, f)# 读with open(json_path) as f: items = json.load(f)
读取和写入csv文件1234567891011# 读with open(csv_file) as f: csv_reader = csv.reader(f, delimiter=',') for row in csv_reader: print row# 写with open(csv_file, 'wb') as f: csv_write = csv.writer(f) for row in csv_data_list: csv_write.writerow(row)
OrderedDict 排序1234567891011121314>>> from collections import O ...
Code
未读
方法
描述
cmp(dict1, dict2)
比较两个字典元素。
len(dict)
计算字典元素个数,即键的总数。
str(dict)
输出字典可打印的字符串表示。
type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
dict.clear()
删除字典内所有元素
dict.copy()
返回一个字典的浅复制
dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
dict.has_key(key)
如果键在字典dict里返回true,否则返回false
dict.items()
以列表返回可遍历的(键, 值) 元组数组
dict.keys()
以列表返回一个字典所有的键
dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加 ...
Code
未读
方法
描述
cmp(list1, list2)
比较两个列表的元素
len(list)
列表元素个数
max(list)
返回列表元素最大值
min(list)
返回列表元素最小值
list(seq)
将元组转换为列表
list.append(obj)
在列表末尾添加新的对象
list.count(obj)
统计某个元素在列表中出现的次数
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj)
将对象插入列表
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)
移除列表中某个值的第一个匹配项
list.reverse()
反向列表中元素
list.sort(cmp=None, key=None, reverse=False)
对原列表 ...
Learn
未读互联网协议按照功能的不同分为七层。
OSI七层协议:应,表,会,传,网,数,物。
其中应表会可以归为应用层。
应用层:应用程序。http,ftp协议
传输层:tcp/udp协议。端口来标识运行中的一款应用程序。 以太网头|IP头|tcp头|数据
网络层:IP协议,用于寻找子网。
数据链路层:Ethernet(以太网)协议,将数据按标准分组。
物理层:物理设备,发射电信号,如:101001
tcp也称作流式协议,需要双向管道(来回)。
通过握手确认建立临时管道。
udp协议不需要通道,不会等待对方确认是否收到。
效率比tcp协议高,但是不可靠。(只负责丢)
socket层在应用层和传输层(tcp/udp)之间的中间软件抽象层,它是一组接口。
socket为套接字编程。
一个简单的服务端和客户端服务端
123456789101112131415161718192021222324iimport socket# 创建一个套间字对象。 (socket.AF_INET 套间字类型 socket.SOCK_STREAM 是tcp传输协议)phone = socket. ...
Learn
未读开启子进程的两种方式方式一:
123456789101112import timefrom multiprocessing import Processdef task(name): print('{0} is running'.format(name)) time.sleep(3) print('{0} is done'.format(name))if __name__ == '__main__': p = Process(target=task, args=('process001', )) # 向操作系统发送一个信号 p.start() print('here first')
方式二:
123456789101112131415161718import timefrom multiprocessing import Processclass MyProcess(Process): def __in ...
Article
未读下面的内容在py3.8测试ok,有些是3.5或者3.7之后才开放的特性
语句变成函数print语句在python3里变成了print()函数。
1234567# python2print 'hello pig!'# python3print('hello pig')print('1', '2', '3', sep='+')print('1', '2', '3', sep='\n')
raise语句。
12345# python2raise Exception, 'I made a mistake.'# python3raise Exception('I made a mistake.')
当然还有exec()。
12345# python2exec 'print("Hello World")'# pyt ...
Code
未读
方法
描述
string.capitalize()
把字符串的第一个字符大写
string.center(width)
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding=’UTF-8’, errors=’strict’)
以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=’UTF-8’, errors=’strict’)
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是 ...