Rendering学習日記

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

視点の初期化

メタセコイアには、メニュー「表示」→「視点の設定」→「初期化」がついていますが、
これをスクリプトにしてみた。
setCameraAngle(angle)が使えるのかと思ったら、うまく動かない。とりあえず、"""〜"""までコメントアウトにしていますが、スクリプトを実行するとデフォルトの視点位置に戻ります。
#デフォルトにする
#default_home.py
MQSystem.clearLog()
doc = MQSystem.getDocument()
scn = doc.getScene(0)

"""
angle = scn.getCameraAngle()
angle.head= -20.0
angle.pitch= 45.2
angle.bank= 0.0
scn.setCameraAngle(angle)
angle = scn.getCameraAngle()
"""

mqpt = scn.getCameraPos()

mqpt.x = 649.519
mqpt.y = 750.000
mqpt.z = 1125.000
scn.setCameraPos(mqpt)
pos = scn.getCameraPos()

mqpt = scn.getLookAtPos()
mqpt.x = 0.0
mqpt.y = 0.0
mqpt.z = 0.0
scn.setLookAtPos(mqpt)
lookat = scn.getLookAtPos()

angle = scn.getCameraAngle()

scn.fov=15.189
fov=scn.fov

MQSystem.println("pos: " + str(pos))
MQSystem.println("angle: " + str(angle))
MQSystem.println("lookat: " + str(lookat))
MQSystem.println("fov: " + str(fov))
  • -
  • -

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

基本図形の平面をつくります。
オブジェクトパネルにある最初のオブジェクトobj1に平面を書き込むスクリプト。
作成後、オブジェクトパネル内のオブジェクトを削除して実行しようとするとエラーになる。
# 基本図形、平面をつくる
doc = MQSystem.getDocument()
num = doc.numObject #オブジェクトの数
obj = doc.object[0] #オブジェクトパネルにある最初のオブジェクト
out = MQSystem.println
out(obj.name)
out("オブジェクトの数 %d" % num) #オブジェクトの数を表示
obj.name="plane01" #オブジェクト名を変更
a=doc.getObjectIndex(obj) #オブジェクトのインデックスを取得
out("オブジェクトのインデックス番号:%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)
  • -
  • -

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だからですね。

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