The Blender Python API 〜Pythonを使ってみよう〜
前回はBlenderでPythonを書き始める準備をしました。
ここからBlenderPyhonの記事を書き始めればよかったなぁ、と振り返る次第です。
そして、前回作成した、スクリプトを少しいじりました。
※ここに記載している文字をコピってもインデント(Tab)が入らないため動きません。
下のリンクからソースをダウンロードできます。
201802_A.py------------------------------------------------------------------------------------
import bpy
size = 5
for k in range(size):
for j in range(size):
for i in range(size):
print('(X: %s,Y: %s,Z: %s)' % (i, j, k))
bpy.ops.mesh.primitive_cube_add(radius=0.25, location=(i,j,k))
------------------------------------------------------------------------------------
変数の「size」を追加して「range(5)」と書いている部分を「range(size)」に
修正しました。
実行結果は変わりません。(こんな感じです↓)
このスクリプトをいじり倒して見るのが今回の試みです。
まずは「size=5」を「size=7」
実行結果はこんな感じです。↓
なんかすごい増えた感じです。これは一体どういう事でしょうか?
まずは、このスクリプトで使用している「for」に着目してみましょう。
for ... と3段重ね担っています。俗にいう3次元ループってやつですね。
あまり聞かないかもですが。。。
201802_B.py---------------------
print('*************')
for k in range(1):
for j in range(1):
for i in range(1):
print(i, j, k)
---------------------
上記のスクリプトの実行結果です。
---------------------
*************
0 0 0
---------------------
同様に「2」を入れた時の処理結果です。
---------------------
*************
0 0 0
1 0 0
0 1 0
1 1 0
0 0 1
1 0 1
0 1 1
1 1 1
---------------------
こんな感じに出力結果をみて見るとどの様な値が順に入っているのか
わかります。
原点(0,0,0)に始まり、前(1,0,0)、横(0,1,0)、斜め前(1,1,0)->1段目
上(0,0,1)、そして2段目の前(1,0,1)、横(0,1,1)、斜め前(1,1,1)->2段目....
同様に「3」を入れた時の出力結果を下に示します。
---------------------
*************
0 0 0
1 0 0
2 0 0
0 1 0
1 1 0
2 1 0
0 2 0
1 2 0
2 2 0
0 0 1
1 0 1
2 0 1
0 1 1
1 1 1
2 1 1
0 2 1
1 2 1
2 2 1
0 0 2
1 0 2
2 0 2
0 1 2
---------------------
上記の値でキューブを表示させてみますと以下の様になります。
size = 1
size = 2
size = 3
x軸の1段目だけを見ると下の様になります。
size = 1 →(0,0,0)
size = 2 →(0,0,0), (1,0,0) ....
size = 3 →*1
size = 15
for ang in range(24):
rad = math.radians(ang * size);
x = (math.pi * math.cos(rad));
y = (math.pi * math.sin(rad));
point(x,y);
ーーーーーーーーーーーーーーーーーーーーーーーーーー
15度の間隔で、24個のキューブを配置する処理になります。
いやぁ、なんかスッキリした(笑)
今日はここまで!
*1:0,0,0), (1,0,0), (2,0,0) ...
今までの流れを図にして見るとわかると思います。
例:Xは前、Yは左、Zは上とマス状の絵を書いて見る
提示したスクリプトは、早い話が
『「1辺がsizeの立方体を作る」スクリプトで各キューブの配置する場所を指定する
法則を示している』という事です。
こんな感じで「〜の法則」を見つけてやるとキューブを使って何かが描けそうです。
そして、螺旋を描くのに良いサイトがあったのでそちらを参考にします。
そのままpythonコードでは使用できなかったのでちょいと頭をひねりました。
作ったコードが以下になります。
201802_C.pyーーーーーーーーーーーーーーーーーーーーーーーーーー
import bpy
import math
print('*************')
def point(x,y) :
bpy.ops.mesh.primitive_cube_add(radius=0.25, location=(x,y,0