Takunojiの日記

自分が勉強したプログラム技術メモ

Blender Python 7〜オブジェクトをイジる〜

前回は、Blenderでの基本的なスクリプトを実行しました。
ターミナルでテキストエディタで作成した、スクリプトのコンソール出力を確認、
3Dオブジェクトを作成し、シーン(ワールド)への表示を行いました。

今回は、前回作成したスクリプトの内容についてやります。
前回、写経したスクリプトだと以下の様に表示されました。

f:id:Takunoji:20180121085932p:plain

ちなみに左下の部分、はテキストエディタで写経したスクリプトです。
コードは以下になります。
[写経]コメントを追加します。Blenderに日本語の入力設定をしていないため
   ブログの方にコメントを記載いたします。
-----------------------------------------------------------------------
# 各種ライブラリのインポート 
import bpy
import math
from mathutils import Vector
# 三角錐を描画するための点を指定します。
vertices = [
Vector*1,
Vector*2, 0)),
Vector*3, 0)),
Vector*4
  引数は可変です(2〜4です→上記サイト参照)
 
①: Vector*5,                # x=0, y=-ルート3, z=0
②: Vector*6, 0)),       # x=0.5, y=1 / (2 * ルート3), z=0
③: Vector*7, 0)),     # x=-0.5, y=1 / (2 * ルート3), z=0
④: Vector*8, # y軸の値をマイナス方面に増やしスクリプトを起動

f:id:Takunoji:20180121204536p:plain

おおっ!想定通り!!
じゃ同様に。。。下の三枚のキャプチャはどの頂点をいじった時でしょうか?

f:id:Takunoji:20180121204815p:plain

f:id:Takunoji:20180121204836p:plain

f:id:Takunoji:20180121205042p:plain

答えは次回(笑)
と行きたかったのですが、
上の①〜③までの値を見るとそれぞれX〜Yまでの
値を設定していてZ軸が0のものです。→平面の三角形の頂点を示します。
④に関しては、Z軸以外が全て0なので立体的になっている三角錐の頂点部分になります。

そして、イントロダクションは終わりにして。
次回は、基本を一からやり始めようと思います。

*1:0, -1 / math.sqrt(9), 0

*2:0.5, 1 / (2 * math.sqrt(3

*3:-0.5, 1 / (2 * math.sqrt(3

*4:0, 0, math.sqrt(3))),
]
print(vertices)
#点と点の間「面」を定義する様です。
※この部分はまだ理解できていません。。。
mesh = bpy.data.meshes.new('MyMesh')
mesh.from_pydata(vertices, [], [[0,1,2], [0,1,3], [1,2,3], [2,0,3]])
mesh.update()
# 3dオブジェクトを作成します。
obj = bpy.data.objects.new('MyObject',mesh)
# シーンにオブジェクトを登録(表示)します。
bpy.context.scene.objects.link(obj)
-----------------------------------------------------------------------
Vectorは描画するコンポーネントの各頂点を示しているはず。。。
※日本語サイトありました!
  Vector(1次元座標(x), 2次元座標,(y), 3次元座標(z), 4次元座標(t=時間軸

*5:0, -1 / math.sqrt(3), 0

*6:0.5, 1 / (2 * math.sqrt(3

*7:-0.5, 1 / (2 * math.sqrt(3

*8:0, 0, math.sqrt(3))),                      # x=0, y=0, z=ルート3
早い話が、ベクトル座標を表している様です。
ベクトル。。。昔、数Ⅱでやった様なやらない様な。。。
学校で深くやってないから。。。そんな言い訳は意味がありません。
プログラムを元に理解すべし(笑)

上記スクリプト、vertices で定義しているVectorの値をいじって理解に臨みます。
【仮説】
コードを参照して
・vertices => 頂点という変数名から4点が指定されているであろう
・同様にベクトルということで原点(0, 0, 0)座標より座標が上記の①〜④に伸びている
そして、スクリプトの実行結果より

f:id:Takunoji:20180121202517p:plain

①〜④は頂点で間違いなさそうだ。。。
確認、どこがどの頂点に対応しているのか?
テストその1 → z軸の値が0のものは一番下の三角形部分の頂点であろうか?
確認テスト=z軸の値が0のものに関して値を変更してみる
画面を三角形が見える様にずらす→Shiftキーを押しながらマウスホイールをドラッグして動かす。。

f:id:Takunoji:20180121204058p:plain

【テストケース1】
・x軸が0, yがルート3となる点は緑色の線の上にある点→①の点であろう
テストを実行
Vector((0, -2 / math.sqrt(3), 0