正二十面体を並べてみる その2
- Metasequoia
- by yuichirou yokomakura
- 2010.09.05 Sunday 09:13
Metasequoia Pythonを使って正二十面体を81個並べた。Parthenon Rendererでレンダリングできた。
ガラスの質感を設定した。

ガラスの質感を設定した。

- -
- -
日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。
#power01.py
name="box_test"
name2="box_test2"
filename=name+".mqo"
f=open(filename,'r')
filename2=name2+".mqo"
g=open(filename2,'w')
a=f.read()
a1=a.replace('power(5.00)','power(100.00)')
g.write(a1)
f.close()
g.flush()
g.close()
import random
def p(*args):
"""
プリント関数
複数の引数を渡せる。
"""
if len(args)==0:
# 改行させる
MQSystem.println("")
return
for arg in args:
MQSystem.println(str(arg))
# 基本図形、新規オブジェクトで立方体複数つくる その2
#drawCube_def_metal.py
doc = MQSystem.getDocument()
out = MQSystem.println
#
def unitcube(L=50,x=0,y=0,z=0):
obj = MQSystem.newObject() #新規オブジェクト
num=doc.numObject
a=num
obj.name="cube_%d" % a #オブジェクト名をつける
obj.addVertex(x-L/2.0,y-L/2.0,z+L/2.0) #0 頂点番号
obj.addVertex(x+L/2.0,y-L/2.0,z+L/2.0) #1
obj.addVertex(x+L/2.0,y+L/2.0,z+L/2.0) #2
obj.addVertex(x-L/2.0,y+L/2.0,z+L/2.0) #3
obj.addVertex(x-L/2.0,y-L/2.0,z-L/2.0) #4
obj.addVertex(x-L/2.0,y+L/2.0,z-L/2.0) #5
obj.addVertex(x+L/2.0,y+L/2.0,z-L/2.0) #6
obj.addVertex(x+L/2.0,y-L/2.0,z-L/2.0) #7
obj.addFace([0,3,2,1])
obj.addFace([1,2,6,7])
obj.addFace([4,7,6,5])
obj.addFace([0,4,5,3])
obj.addFace([3,5,6,2])
obj.addFace([0,1,7,4])
doc.addObject( obj )
mat1=MQSystem.newMaterial()
doc.addMaterial(mat1) #マテリアルをドキュメントに追加
num0 = doc.numMaterial #現在の材質数を数える
numm=num0-1 #マテリアル番号は一つ少ない
doc.material[numm].color.red=num0*0.00346
doc.material[numm].color.green=0.1
doc.material[numm].color.blue=1-num0*0.00346
doc.material[numm].alpha=1.0
doc.material[numm].diffuse=1.0
doc.material[numm].ambient=0.0
doc.material[numm].emissive=0.0
doc.material[numm].specular=1.0
for face in obj.face:
face.material=numm #マテリアルnumm番を面に割り当てる
import traceback
import sys
cnt=0
try:
for dist in range(0,1400,60):
for dist2 in range(0,1400,60):
cnt=cnt+1
#out(str(dist))
unitcube(40,dist-700,20+random.gauss(0,8),dist2-700)
out(str(cnt))
except:
info=sys.exc_info()
p(info[0])
p(info[1])
p(*traceback.extract_tb(info[2]))
num = doc.numObject #オブジェクトの数
out("オブジェクトの数 %d" % num) #オブジェクトの数を表示