Shadeで作った3Dモデルをofx3DModelLoaderで読み込んでみる

March 21, 2010
タイトルの通りですが、Shadeで作った3Dモデルをofx3DModelLoaderで読み込んでみます。

addonsExamplesの3DModelLoaderExampleを見ると、3dsのリスのモデルデータを読み込んでいます。
(どーでもいいですが、このモデル、JOJO第二部のカーズが腕から作り出したリスみたいでちょっと怖い。)
ソースを見るとofx3DModelLoaderオブジェクトを作って、loadさせるだけのようです。

//load the squirrel model - the 3ds and the texture file need to be in the same folder
squirrelModel.loadModel("squirrel/NewSquirrel.3ds", 20);


■Shade から3dsの書き出し
Shadeでモデルを作ります。oF側のデフォルトで表示させた場合、Shade内の10mmくらいのサイズで、ちょうどいい大きさになります。大きすぎるとカメラがモデルの中に入ってしまい、表示されなくなります。





次に、3ds形式に書き出します。[エクスポート][3D Studio]を選択。グループ名は[インデックス]。他のを選ぶとoFに読み込まれませんでした。


保存先は、プロジェクトのbin/dataの中です。テクスチャを貼ってある場合は自動的に同階層に保存されます。

■openFrameworks

testApp.h

#ifndef _TEST_APP
#define _TEST_APP

#include "ofMain.h"
#include "ofx3DModelLoader.h"

class testApp : public ofBaseApp{

public:
void setup();
void update();
void draw();

void keyPressed (int key);
void keyReleased(int key);
void mouseMoved(int x, int y );
void mouseDragged(int x, int y, int button);
void mousePressed(int x, int y, int button);
void mouseReleased(int x, int y, int button);
void windowResized(int w, int h);

ofx3DModelLoader modelObj;
};

#endif



testApp.cpp

#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){

// 基本設定 --------------------------
ofBackground(0, 0, 0);
ofSetFrameRate(60);
ofEnableSmoothing();

// 隠面消去 --------------------------
glClearDepth(1.0);
glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

// 照明 -----------------------------
GLfloat lt0_position[] = { 100, 100, 200}; //ライトの位置
GLfloat lt0_ambient[] = { 0.5, 0.5, 0.5, 0.5 }; //環境光
GLfloat lt0_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; //スポットライト

glLightfv(GL_LIGHT0, GL_POSITION, lt0_position); //0番ライトに設定
glLightfv(GL_LIGHT0, GL_AMBIENT, lt0_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lt0_diffuse);

glEnable(GL_LIGHTING); //ライティング開始
glEnable(GL_LIGHT0); //0番のライトを点灯

// モデルデータロード -----------------------------
modelObj.loadModel("modelSample.3ds", 20 );
}

//--------------------------------------------------------------
void testApp::update(){

}

//--------------------------------------------------------------
void testApp::draw(){
static float count = 0;
count+=0.5; //回転角度を増やす

glPushMatrix(); //現在の表示位置を記憶

glTranslatef(ofGetWidth()/2.0, ofGetHeight()/2,0); //画面中心に移動
glRotatef( count, 0, 1, 0 ); //Y軸に回転
modelObj.draw(); //モデルを描画

glPopMatrix(); //記憶した位置に戻す

}

// 以下略



FlashのPV3Dの感覚では、オブジェクトは個別に位置情報を持っていて、それぞれに移動や回転を行えばOKですが、oF(というかOpenGL)は毎回位置を設定して描画するので、glPushMatrix();とglPopMatrix();が必要になります。最初、この考え方が分からず悩みました。現在は、プリミティブな形状をクラス化して、PV3Dライクに使えるように準備をしています。
創るセンス 工作の思考

創るセンス 工作の思考

March 20, 2010


創るセンス 工作の思考

作ることで得られるセンス、ものづくりから生まれる知とは? かつての日本では、多くの少年が何らかの工作をしていた。しかし、技術の発展で社会が便利になり、手を汚して実際にものを作るという習慣は衰退し、既製品を選んだり、コンピュータの画面上で作業することが主になった。このような変化の過程で失われた、大切なものがある。それは、ものを作ったことのない人には、想像さえつかないものかもしれない。「ものを作る体験」でしか学べない創造の領域、視覚的な思考、培われるセンスとは何か。長年、工作を続けている人気作家が、自らの経験を踏まえつつ論じていく。



筆者自身が述べている通り、全体的に「最近の若者は・・。自分が若かった頃は・・。」という雰囲気で書かれています。それが少し鼻につくところありましたが、実践して思考せよという主張にはおおいに共感しました。
外から見えない部分であっても、手を抜かず作り込むのは「工作の神様が見ているから」。神様=本人。職人気質とも言えますが、自分が納得するまでやるという態度には、共感しつつも、自分はそこまで突き詰めて物を作っているだろうかと、振り返ってしまいました。
また、仕事は他者の評価、趣味は本人の評価。どっちにしますか?というくだりも、自分の場合はどうか、と考えさせられました。




森 博嗣 (著)
新書: 204ページ
出版社: 集英社 (2010/2/17)
発売日: 2010/2/17
Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

March 5, 2010


Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門

本書は、インタラクションデザインやメディアアートの現場で現在最も注目されている制作環境、「openFrameworks」の世界初の解説書です。openFrameworksというC++のフレームワークを使用して、プログラミングの初歩から高度な応用まで、具体的なサンプルを作成しながら実践的に学んでいくことを目的にしています。プログラミングの経験のない初心者から、メディアアートに興味を持ち自分で何かを作りたいと考えている方、ProcessingやFlashなど他の環境は経験しているがより強力なプログラミング環境を探し求めている方まで、多くの方々にとって有益な情報を提供しています。


開発環境の導入から基本的な構文、便利なクラスの紹介と、openFrameworksを始めるために必要な情報が網羅されています。エディトリアルも綺麗で読みやすいです。ただ、sbaw09と違い、iPhoneアプリの作成については触れていません。

田所 淳 (著), 比嘉 了 (著), 久保田 晃弘 (著)
単行本: 304ページ
出版社: ビー・エヌ・エヌ新社 (2010/2/21)
発売日: 2010/2/21
立体隠し絵 アッタコレダ的なものをFlashで作ってみる

立体隠し絵 アッタコレダ的なものをFlashで作ってみる

March 3, 2010
本日発売のDSi Ware「立体隠し絵 アッタコレダ」がとても面白いので、似たような仕組みをFlashで作ってみました。


アッタコレダはDSi専用のソフトで、ディスプレイの奥の世界を覗き込み、隠された文字や絵を探すというゲームです。面白いのは、ユーザーの視点に合わせて描画し、まるでDSの奥の小さな箱を覗き込むように操作できる点です。こちらの動画が分かりやすいです。


で、Flashでも顔認識のライブラリーを使って似たような事をできるんじゃないかと思い、作ってみました。









[全画面版]


・顔の位置はカメラで取得するので、「許可」を選んでください。
・赤い表示された後、全く動かない場合は、右クリックから 設定のカメラアイコンを選び、プルダウンから使用するWebカメラを変更してみてください。僕の環境(MacBookPro)の場合は、「USB Video Class Video」で動作しました。
・ディスプレイの上部にWebカメラを置き、50cmくらい離れると認識されやすいです。





アッタコレダ的なものをFlashで作ってみる from HR2 on Vimeo.




環境にもよりますが、動作がかなりもっさりしています。顔認識の精度と速度はトレードなので、実際に使うには何らかの工夫が必要ですね。
アッタコレダは、顔認識ではなく色面の移動量だけを認識しているようです。多分。あと、アニメーションを滑らかにしているので、滑らかに見えます。

今回使わせていただいた顔認識のライブラリーはこちら。Marilena