Blenderで作ったモデルをGLUTで描画する話  

なんの利点があるのさ?  

モデルの座標を外部のファイルに保持することができるので、
C言語のソースファイルに座標を書かなくても良くなります

また、座標を直接書くよりも直感的にモデルを作成できます

えっ、GIMPとかPsとかで描いて画像読み込んだ方がラクなんじゃ...  

はい、多分そっちのほうがラクです
でも3Dだとこんな感じで座標を読み込んで処理する必要があるので
考え方だけは知ってていいんじゃないかなって

Blender?  

フリーでオープンソースな3DCG作成ソフトウェア
フリーなのにかなりの高機能です
ちなみに電算機室のPCにもインストールされています

blender_res.png

今回はこれで作ったモデルをglutで表示させるっていう話
ただし、3Dなモデルを扱うのは面倒なので、今回は2Dなモデルを対象とします

どうやって出すのさ?  

手順は以下の通り

  • Blenderでモデルの各座標をテキストファイルに書き出す
  • C言語でそのテキストファイルを読み込む
  • glutで頂点を登録して画面に書き出す

また、Blenderから書き出すテキストファイルは次のような構造にします

  • 1行目にモデルを構成する座標の数
  • x座標とy座標が1行に1つずつ並ぶ
  • 60
    -38.778374 -50.802578
    -3.070045 -41.519920
    -3.070040 -13.671919
    38.940594 -50.802589
    3.232277 -13.671919
    以下続く...

BlenderでPython  

BlenderはPythonスクリプトを用いて操作することができます
この機能を使って、モデルの座標を外部のテキストファイルに書き出します

具体的な手順  

モデルの作成  

モデルの作成方法は適当に調べてくださいいくらでも情報出てきます

BlenderでPythonスクリプトを書く  

まずはスクリプトを書くための画面を表示させます

画面上のツールバー内「Default」の左のボタンを押し、出てきたメニューから 「Scripting」を選択
bl_script1.png

次に、画面左の中央より少し下の「New」を押して テキストを新規作成します
bl_script2.png

すると、テキストを打てるようになるので、そこにスクリプトを書く
bl_script3.png

なお、スクリプトの意味は以下の通りである

import bpy

# モデルの拡大率
# 書きだしたモデルは非常に小さいので、ある程度拡大する
scaling = 40

# Plane.txtファイルを作成
# ファイル名を書き換えることで違うファイルに書き出すこともできる
f = open("Plane.txt", "w")

# 選択されているオブジェクトを取得
obj = bpy.context.active_object

# 頂点の数を書き出す
f.write(str(len(obj.data.polygons) * 3))
f.write("\n")

# ポリゴン(多角形)を書き出す
# obj.data.polygonで選択されているオブジェクトの
# ポリゴンのリストを取得できる
for poly in obj.data.polygons:
    
    # ポリゴンの頂点のうち3つのみ(すなわち三角形)を書き出す
    for i in range(0, 3):
        # 頂点を取得して先ほど指定した拡大率で拡大
        co = obj.data.vertices[poly.vertices[i]].co * scaling
        
        # ファイルに頂点を書き出す
        f.write("%f %f\n" % (co.x, co.y))

# ファイルを閉じる
f.close()

スクリプトの実行  

スクリプトを打ち込んだら、テキストを入力した画面の右下にある「Run Script」を押して スクリプトを実行します
bl_script4.png

エラーが無ければPlane.txtというファイルがBlenderファイルと同じ場所にできているはずです output.png

次回予告  

今回書きだしたテキストファイルをC言語で読み込んでglutで描画する話を書きます たぶん