Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

Metasequoia Pythonで平面をつくる その2

新規オブジェクトで平面を作っていく。
インデックスが-1
[-1] ドキュメントに登録されていないオブジェクトということでしょうか。
# 基本図形、新規オブジェクトで平面をつくる
doc = MQSystem.getDocument()

obj = MQSystem.newObject() #新規オブジェクト
out = MQSystem.println
out(obj.name)
a=doc.getObjectIndex(obj) #オブジェクトのインデックスを取得

obj.name="plane_%d" % a #オブジェクト名をつける

v = []
v.append( obj.addVertex(200,0,200)) #面の向きはカメラから見て反時計回り
v.append( obj.addVertex(-200,0,200))
v.append( obj.addVertex(-200,0,-200))
v.append( obj.addVertex(200,0,-200))

obj.addFace(v)
doc.addObject( obj )

num = doc.numObject #オブジェクトの数
out("オブジェクトの数 %d" % num) #オブジェクトの数を表示


-1となるのがわかりました。
doc.addObject( obj )
でシーンにオブジェクトを追加(ドキュメントに登録)した後に、
a=doc.getObjectIndex(obj) #オブジェクトのインデックスを取得
を行えば、aは1となりますね。

obj.name="plane_%d" % a #オブジェクト名をつける

plane_1と表示されます。
オブジェクトのインデックス番号が1なのは、最初にあるobj1がインデックス番号0だからですね。

くりかえしくりかえし、基礎基本の勉強です。
ありがとうございます。
  • -
  • -

ポリゴン、5角形をつくる

メタセコイアでのPython script練習、繰り返し処理を使っていない面倒な記述をしていますが、原理を理解するために書いてみました。Metasequoia Python APIの勉強です。メタセコイアマスターガイドを参考にしました。ありがとうございます。
#kaku5.py
segment = 5
radius=200.0

from math import *
crad = pi / 180 * 45
irad = 2*pi/segment

doc = MQSystem.getDocument()
segment = 5
radius=200.0

from math import *
crad = pi / 180 * 45
irad = 2*pi/segment

doc = MQSystem.getDocument()
obj = MQSystem.newObject()
obj.name = "polygon_%d" % segment

v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) )) #中心
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) ))
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) ))
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) ))
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) ))
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

doc.addObject( obj )
  • -
  • -

八角すいをつくる

前の記事でポリゴン、5角形をつくったが、きちんとくりかえし処理を行うようにした。ただし、ひとつひとつのポリゴンは移動ツールで触るとばらばら。これはこれで面白いか。勉強ですね。
#poly8.py
segment = 8
radius=200.0

from math import *
crad = pi / 180 * 45
irad = 2*pi/segment

doc = MQSystem.getDocument()
obj = MQSystem.newObject()
obj.name = "circle_%d" % segment


for i in range(segment):
v=[]
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
crad = crad+irad
v.append(obj.addVertex( MQSystem.newPoint( 0.0, 100.0, 0.0 ) ))
v.append(obj.addVertex( MQSystem.newPoint( radius*sin(crad), 0.0, radius*cos(crad) ) ))
obj.addFace(v)

doc.addObject( obj )


00.jpg
  • -
  • -
<< 19/30 >>