ofxAssimpMeshHelperの修正
初稿: 2013/10/8, 最終更新: 2013/10/10
13.ofxAssimpModelLoaderの修正
13.1 ライブラリの修正
ofxAssimpModelLoader.cpp, ofxAssimpModelLoader.hを置き換えてビルドしてください。念のため、元ファイルのバックアップを取っておくと良いでしょう。
meshHelperへの登録をメッシュのリストではなく、ノードに変更しています。ソースコードの解説は、長くなってしまったので省略します。デバッグが不十分ですので、他のプログラムに使うときは注意してください。
13.2 メッシュ呼び出し方法の変更
メッシュとノードが1対1で対応していることを想定し、メッシュにノードと同じ名前が与えるように変更しています。meshHelperのメッシュ番号がノードの探索順に変更されていますので、メッシュの参照が今までの物では正しく動作しません。
次のように、名前で関節を判定するように変更します。
//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){
if(button == 1 && !nearestIndex.empty()){
cam.disableMouseInput();
float value_x = x / (float)ofGetWidth();
float value_y = y / (float)ofGetHeight();
for(int i=0; i<(int)nearestIndex.size(); i++){
aiString name = model.getMeshHelper(nearestIndex[i]).mesh->mName;
if(name == aiString("CHEST_JOINT0_Link")){ chest = adjust_value(chest, value_x); }
else if(name == aiString("HEAD_JOINT0_Link")){ pan = adjust_value(pan, value_x); }
else if(name == aiString("HEAD_JOINT1_Link")){ tilt = adjust_value(tilt, value_y); }
else if(name == aiString("RARM_JOINT0_Link")){ rarm[0] = adjust_value(rarm[0], value_x); }
else if(name == aiString("RARM_JOINT1_Link")){ rarm[1] = adjust_value(rarm[1], value_y); }
else if(name == aiString("RARM_JOINT2_Link")){ rarm[2] = adjust_value(rarm[2], value_x); }
else if(name == aiString("RARM_JOINT3_Link")){ rarm[3] = adjust_value(rarm[3], value_x); }
else if(name == aiString("RARM_JOINT4_Link")){ rarm[4] = adjust_value(rarm[4], value_x); }
else if(name == aiString("RARM_JOINT5_Link")){ rarm[5] = adjust_value(rarm[5], value_x); }
else if(name == aiString("LARM_JOINT0_Link")){ larm[0] = adjust_value(larm[0], value_x); }
else if(name == aiString("LARM_JOINT1_Link")){ larm[1] = adjust_value(larm[1], value_y); }
else if(name == aiString("LARM_JOINT2_Link")){ larm[2] = adjust_value(larm[2], value_x); }
else if(name == aiString("LARM_JOINT3_Link")){ larm[3] = adjust_value(larm[3], value_x); }
else if(name == aiString("LARM_JOINT4_Link")){ larm[4] = adjust_value(larm[4], value_x); }
else if(name == aiString("LARM_JOINT5_Link")){ larm[5] = adjust_value(larm[5], value_x); }
}
}
}
右手関節の座標系も表示されるように、draw関数内のメッシュの数を問い合わせる関数を変更します。
for(int i=0; i<model.getMeshCount(); i++){
fig.ofxAssimpModelLoaderの修正
ちゃんと両手が表示されるようになりました。