Rendering学習日記

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

カメラ位置を求める

メタセコイアのPython scriptサンプルをちょっと変更してみる。
右クリックでカメラ位置をぐりぐり変更してから、スクリプトを実行すると位置が表示される。カメラ情報を取得し、カメラ設定をどのようにするかいろいろと考えることができます。
#camera_pos.py
doc = MQSystem.getDocument()
scene = doc.getScene(0)

pos = scene.getCameraPos()
angle = scene.getCameraAngle()
lookat = scene.getLookAtPos()
upvec = scene.getLookAtUpVec()
center = scene.getRotationCenter()
fov = scene.fov

MQSystem.println("pos: " + str(pos))
MQSystem.println("angle: " + str(angle))
MQSystem.println("lookat: " + str(lookat))
MQSystem.println("upvec: " + str(upvec))
MQSystem.println("center: " + str(center))
MQSystem.println("fov: %(#).3f" % {"#":fov})
MQSystem.println("----------------------------------")


Pythonでメタセコイアの使い方の幅が広がります。いろいろと勉強ですね。ありがとうございます。
  • -
  • -

視点の初期化

メタセコイアには、メニュー「表示」→「視点の設定」→「初期化」がついていますが、
これをスクリプトにしてみた。
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)
  • -
  • -
<< 18/30 >>