I used Skanect to scan my room down. The .ply file generated is like this:
0.614557 -0.0194625 -0.305274 -0.127814 -0.551592 0.824263 100 113 96
0.614418 -0.019946 -0.305417 -0.127814 -0.551592 0.824263 98 111 96
0.61429 0.00103368 -0.303381 0.0386538 -0.603242 0.796621 104 107 95
…
扫描用的工具叫Skanect,参见上一篇
导出的.ply文件大概是这样
0.614557 -0.0194625 -0.305274 -0.127814 -0.551592 0.824263 100 113 96
0.614418 -0.019946 -0.305417 -0.127814 -0.551592 0.824263 98 111 96
0.61429 0.00103368 -0.303381 0.0386538 -0.603242 0.796621 104 107 95
…
9 columns are x, y, z, xn(normal), yn, zn, r, g, b.
Took me a while to make it work because I didn’t know shit about Python itself or Maya Python. So if you’re in fog too I present you Python functions for Maya.
Notes:
Attributes have types, I forgot because Python fed me honey on this one. Stuck for a day.
emit() is buggy, it crashed the soul out of me when I used at=’rgbPP’ , use setParticleAttr() instead
Important, after importing, do ‘set current state to initial state’ and cache the first frame, otherwise the color will be gone next time you start it, this is some bullshit.
To hide part of the point cloud, select and cmds.setParticleAttr(at=’opacityPP’, fv=0).
[py]
## Maya Point Cloud (.xyz) Importer
## Format: X Y Z ,a ,a a, R, G, B for every line
## Page: http://axlarts.com/?p=1923
from maya import cmds
RES=100 # Only draw one particle for every RES lines in the file,
# in case of huge cloud but only need reference in the scene.
path=cmds.fileDialog2(ds=2,fm=1)[0]
f0=open(path)
n=0; pn=0
p0=cmds.nParticle()[1]
cmds.setAttr(p0+’.isDynamic’,0)
cmds.addAttr(p0,ln=’rgbPP’,dt=’vectorArray’)
while 1:
line=f0.readline().split(‘ ‘)
n+=1
if line[0]==”:
break
if n%10000==0:
print "%d lines %d particles\n" % (n, pn)
if n%RES!=0:
continue
rotted=False
xyz=[]
for doll in line:
try:
dollF=float(doll)
except ValueError:
rotted=True
print ‘(Warning) Invalid value %s in line%d: %s’ % (doll,n,line)
break
xyz.append(dollF)
if len(line)!=9:
rotted=True
if rotted:
continue
for a in range(6,9): #Just because it’s x y z bla bla bla r g b in my case
xyz[a]/=255
cmds.emit(object=p0,position=xyz[:3])
cmds.select(p0+’.pt[‘+str(pn)+’]’)
cmds.setParticleAttr(at=’rgbPP’, vv=xyz[6:9])
pn+=1
[/py]
Additional Python script to import particles, using only the first 3 numbers everyline as x,y,z and ignoring others.
There surely is way to make this more compatible but that’s too much effort..
[py]
## Maya Point Cloud (.xyz) Importer
## Format: X Y Z for every line
## Page: http://axlarts.com/?p=1923
from maya import cmds
RES=1 # Only draw one particle for every RES lines in the file,
# in case of huge cloud but only need reference in the scene.
path=cmds.fileDialog2(ds=2,fm=1)[0]
f0=open(path)
n=0; pn=0
p0=cmds.nParticle()[1]
cmds.setAttr(p0+’.isDynamic’,0)
cmds.addAttr(p0,ln=’rgbPP’,dt=’vectorArray’)
while 1:
line=f0.readline().split(‘ ‘)
n+=1
if line[0]==”:
break
if n%10000==0:
print "%d lines %d particles\n" % (n, pn)
if n%RES!=0:
continue
rotted=False
xyz=[]
for doll in line:
try:
dollF=float(doll)
except ValueError:
rotted=True
print ‘(Warning) Invalid value %s in line%d: %s’ % (doll,n,line)
break
xyz.append(dollF)
if len(line)<3:
rotted=True
if rotted:
continue
cmds.emit(object=p0,position=xyz[:3])
pn+=1
[/py]
9行分别是 x, y, z, xn, yn, zn, r, g, b,xn是normal方向。
所以用个脚本从文件读数据-添加粒子就行了。
搜到这里的同学估计和我半斤八两,所以我present你Maya Python函数表

效果图(脚本见文末)
小记:
添加attribute注意类型,Python让我忘了这茬了,卡了我半天。
emit()函数有bug,直接 at=‘rgbPP’ 的话会崩溃,要用setParticleAttr()
5/1/2013 Update:
导入以后要先set current state to initial state 然后存下首帧cache,不然颜色会丢掉。
不要的部分可以选中然后 cmds.setParticleAttr(at=’opacityPP’, fv=0) 隐藏。
[py]
## Maya Point Cloud (.xyz) Importer
## Format: X Y Z ,a ,a a, R, G, B for every line
## Page: http://axlarts.com/?p=1923
from maya import cmds
RES=100 # Only draw one particle for every RES lines in the file,
# in case of huge cloud but only need reference in the scene.
path=cmds.fileDialog2(ds=2,fm=1)[0]
f0=open(path)
n=0; pn=0
p0=cmds.nParticle()[1]
cmds.setAttr(p0+’.isDynamic’,0)
cmds.addAttr(p0,ln=’rgbPP’,dt=’vectorArray’)
while 1:
line=f0.readline().split(‘ ‘)
n+=1
if line[0]==”:
break
if n%10000==0:
print "%d lines %d particles\n" % (n, pn)
if n%RES!=0:
continue
rotted=False
xyz=[]
for doll in line:
try:
dollF=float(doll)
except ValueError:
rotted=True
print ‘(Warning) Invalid value %s in line%d: %s’ % (doll,n,line)
break
xyz.append(dollF)
if len(line)!=9:
rotted=True
if rotted:
continue
for a in range(6,9): #Just because it’s x y z bla bla bla r g b in my case
xyz[a]/=255
cmds.emit(object=p0,position=xyz[:3])
cmds.select(p0+’.pt[‘+str(pn)+’]’)
cmds.setParticleAttr(at=’rgbPP’, vv=xyz[6:9])
pn+=1
[/py]
另外附加只看每行前3个数字作为xyz,忽略其他的python脚本
当然可以并成一个了但是没那闲情..
[py]
## Maya Point Cloud (.xyz) Importer
## Format: X Y Z for every line
## Page: http://axlarts.com/?p=1923
from maya import cmds
RES=1 # Only draw one particle for every RES lines in the file,
# in case of huge cloud but only need reference in the scene.
path=cmds.fileDialog2(ds=2,fm=1)[0]
f0=open(path)
n=0; pn=0
p0=cmds.nParticle()[1]
cmds.setAttr(p0+’.isDynamic’,0)
cmds.addAttr(p0,ln=’rgbPP’,dt=’vectorArray’)
while 1:
line=f0.readline().split(‘ ‘)
n+=1
if line[0]==”:
break
if n%10000==0:
print "%d lines %d particles\n" % (n, pn)
if n%RES!=0:
continue
rotted=False
xyz=[]
for doll in line:
try:
dollF=float(doll)
except ValueError:
rotted=True
print ‘(Warning) Invalid value %s in line%d: %s’ % (doll,n,line)
break
xyz.append(dollF)
if len(line)<3:
rotted=True
if rotted:
continue
cmds.emit(object=p0,position=xyz[:3])
pn+=1
[/py]
References:
Legiano Casino Einzahlung https://79.pexeburay.com/index/d1?diff=0&utm_source=ogdd&utm_campaign=20924&utm_content=&utm_clickid=t4w48c4sowkskowc&aurl=https://searl.co/ritakroger454&an=&utm_term=&site=&pushMode=popup
References:
Legiano Casino Mobile images.google.md
References:
Legiano Casino Lizenz http://images.google.lv/url?q=http://l2top.co/forum/proxy.php?link=https://de.trustpilot.com/review/beyondjewellery.de
References:
Legiano Casino Kontakt http://www.ut2.ru
References:
Legiano Casino App wapcenter.yn.lt
References:
Legiano Casino Willkommensbonus https://metager.de/meta/settings?fokus=web&url=https://itapipo.ca/lucienneclemenhttps://metager.de/meta/settings?fokus=web&url=https://itapipo.ca/lucienneclemen</a