Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

Blender Python 本番3〜Pythonのrange関数〜

前回は、頂点〜面を作成について勉強しました。
前回のお残し部分は、以下の部分です。
ちょっとみづらいので前回のソースを修正しました。→緑色になってます。
--------------------------------------------------
# Utility functions
def vert(column, row):
print('""" Create a single vert """')
print (  (column * size, row * size, 0)  )
return (column * size, row * size, 0)


def face(column, row):
print('""" Create a single face """')
print(
(column* rows + row, (column + 1) * rows + row, (column + 1) * rows + 1 + row, column * rows + 1 +row)
)
return (
column* rows + row, (column + 1) * rows + row, (column + 1) * rows + 1 + row, column * rows + 1 +row
)

# Looping to create the grid
verts = [(-1,-1,0), (1,-1,0), (1,1,0), (-1,1,0)]
faces = [(0,1,2,3)]

# Create Mesh Datablock
mesh = bpy.data.meshes.new(name)
mesh.from_pydata(verts, , faces)

# Create Object and link to scene
obj = bpy.data.objects.new(name, mesh)
bpy.context.scene.objects.link(obj)
--------------------------------------------------
参考にしたサイトでは、上記の青い部分に緑色の関数が入っていました。
それをわかりづらいので削除したのでした(笑)
なので今回は、ちゃんとやります。
定義してある関数は2あります。
・vert 
・face

その前に、「range関数」を実行してみましょう。
コードと結果を以下に示します。range(開始, 終了, 間隔)で数字までの数を順に返す。

f:id:Takunoji:20180130215453p:plain


そして、写経します。
※写経は最も簡単な、コーディング力 アップ法だと思います。

import bpy

name = 'Gridtastic'
rows = 5
columns = 10
size = 1

# デバックモード 唵
bpy.app.debug = True

def vert(column, row):
return (column * size, row * size, 0)

def face(column, row):
return (column * row + row
, (column + 1 ) * rows + row
, (column + 1 ) * rows + 1 + row
, column * rows + 1 + row)

verts = [vert(x, y) for x in range(columns) for y in range(rows)]
faces = [face(x, y) for x in range(columns -1) for y in range(rows - 1)]

mesh = bpy.data.meshes.new(name)
mesh.from_pydata(verts, [], faces)

obj = bpy.data.objects.new(name, mesh)
bpy.context.scene.objects.link(obj)

実行結果が以下です。

f:id:Takunoji:20180130211937p:plain

でも、変なゴミの様な三角な様なものがあります。なんなのでしょうか?
それはさておきにして、先ほどの「お残し」を退治しようと思います。
※インデント(tab)が表示されないので、コピペした時にtabが入っていないとエラります
  なので1行に書きました。
【お残し_その1】
def vert(column, row): return (column * size, row * size, 0)
この関数を単純に起動します。
コードは以下になります。
--------------------------------------------------

size = 1
rows = 5
columns = 10

def vert(column, row): return (column * size, row * size, 0)

print(vert(columns, rows))

--------------------------------------------------
そして、実行結果が以下になります。エラーはスペルミスなど上記のコードを作成するのに手間取ったものなので気にしないでください。
1.Blenderの初期画面から左下(Viewの左となり)をクリックしてTextEditorを開きます。

f:id:Takunoji:20180130213038p:plain

2.下にあるText -> Run Scriptをクリックして実行します。

f:id:Takunoji:20180130213329p:plain

キャプチャの下部にある「(10〜」とある部分が関数から出力されたものです。
(10, 5,0)のタプルです。 pythonではリスト、タプル、配列、集合と変数の種類がある様です。変数については、良い記事があったのでそちらを参照ください。

ここのポイントは、内包表記になるのですがそれは次回

今回は、ここまでにします。