fc2ブログ
 カレンダー

11月 │2024年12月│ 01月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

 プロフィール

はしもと

Author:はしもと
ユーザインタフェース系のお仕事をしてます.関心領域は画像処理,拡張現実感,ヒューマンコンピュータインタラクション,エンタテインメントコンピューティングあたり.モノ書きもやってます.

 工学ナビ

工学ナビは工学系の技術のチュートリアルを扱うサイトです.

 作ったもの

 Twitter

 

 天気予報


 ブログ内検索

 カテゴリー

最新コメント

 RSSフィード

 リンク

このブログをリンクに追加する




工学ナビの中の人 はしもとのブログです. いろんなコトを研究的,工学的な視点で見つめます.
メタセコイアで作ったモデルをARToolKitで表示して動かす方法あれこれ
ARToolKitを使った遊びがニコ動を中心に流行っているようなので,
例の記事の補足として,開発者向けの情報を紹介したいと思います.

いちばん面倒な3Dモデル読み込みの方法ですが,モデル+モーションを直接読んだり,
連番ファイルにして読んだり,他の形式に変換して読み込んだりといろいろ考えられます.
以下に方法を並べてみました.


■GLMetaseq
【OpenGL】【C/C++】
入手先:「攻殻機動隊」「電脳コイル」の世界を実現! - ARToolKitを使った拡張現実感プログラミング

(09/02/07修正)
いちばん最初にリリースしたものが「GLMetaseq.h」で,このときはヘッダのみでした.
それをいろいろいじったバージョンをGLMetaseq.h(Ver.2.0)としてこのブログ上で配布しました.
その後,ARToolKit本の執筆に伴い,改めて作り直しを行い,「GLMetaseq.h + GLMetaseq.c」
(ヘッダとソース)としてリリースしました.これが現行のバージョンです.

それぞれ関数名や初期化・終了手順が異なりますのでごちゃまぜで使うことがないようにしてください.

関連記事: 【C/C++】 OpenGLで使えるメタセコイアモデルローダ


■Metasequoia Loader + Mikoto Loader
【OpenGL】【C++】
入手先:http://blog.jyoken.net/?eid=670535

ボロリンこと明石高専の情報工学研究部のブログで公開されているプログラムの中にOpenGL用の
メタセコイアのモデルローダと,モーション作成ソフトMikotoのモーションローダが入っています.
C++によってクラス化されており,同梱されている他のコードと関連して動いているようなので,
それなりに「読む」ことが必要かもしれません.

このブログの「3DCGプログラミング」のカテゴリではかなりハイレベルなOpenGLのコードが
紹介されているので必見です.すげー.


■mqoファイルをwrl(VRML97)に変換してARToolKitの関数で読み込む
【OpenGL】【C/C++】【ARToolKit】

ARToolKitにはVRMLのファイルを読み込める関数が用意されています.
詳しくは付属サンプルコードの「simpleVRML」を参考にしてください.

mqoをwrlに変換するには,メタセコイアのプラグイン「VRML97エクスポーター」を利用します.
モーションを付けたい場合は,同じサイトで公開されている「CyberDelia」というソフトを使います.
このソフトは,mqoを読み込んでパーツベースでモーションを付けた後,wrl形式でファイルを出力
することができます.

コメントをくださった ほよよ さんがニコ動に解説動画をUPしてくださりました.



■mqoファイルをXファイルに変換してDirectXで読む
【DirectX】【C++】

Xファイルというのはモルダーとスカリーが出てくるアレじゃなくて,
DirectXで用いられる3次元モデルのファイルフォーマットのことです.
DirectXには専用の読み込み関数も用意されています.

初音ミクのモーション作成に大活躍中のモーション作成ツール「RokDeBone2」は
モーション付きXファイルの出力に対応しています.

モーション付きXファイルの読み込みは,こちらのサンプルが参考になると思います.
http://tpot.jpn.ph/t-pot/program/44_motion/motion.html
t-pot」さんのページはDirectX関係のコードがとても充実しています.

問題は「OpenGLで書かれたARToolKitのプログラムをどうやってDirectX版に移植するか」
ってことですが,ニコ動界隈でソースを公開してらっしゃる方がいるようなので,
そちらが参考になると思います↓




…という感じです.
RokDeBone2がモーション付きwrlを出力してくれたら一番いいんですけどね.
あるいはモーション付きXファイルをモーション付きwrlに変換できるツールがあれば…
(探したけど見つからない).

他にARToolKitプログラミングに使えそうなローダとか,変換ソフトとかあったらコメントください.
よろしくお願いします.


この記事に対するコメント
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
【2008/02/17 22:04】 | # [ 編集]


はじめまして。
こちらのARToolKitの記事を参考にしてプログラムを作ってます。

GLMetaseq.hの時点から気になってたんですが、
mqoRegistTexture関数で
glDeleteTextures(1, tex_name)によってテクスチャを消してますけど、
これっておかしいような気がするんですが。
mqoRegistTextureを呼んだ時点ではtex_name、実際に使ってるのを考えるとM[i].texNameはmqoReadMaterialでも明示的には初期化されないので
何が入ってるかわからないわけで、最悪M[i-1].texNameとかと同じ値が入っていた場合はM[i-1].texNameが消えちゃうと思うんですが。
というか、そもそも必要ないんじゃないでしょうか。

あと、mqoCreateModel関数とかのGL_COMPILE_AND_EXECUTEはGL_COMPILEで良いんじゃないでしょうか。
【2008/02/18 01:35】 URL | b2ox #7jRj3iUs [ 編集]


はじめまして。GLMetaseq.h (Ver2.0) を使わせていただいたのですが、このヘッダを使ってmqoを表示出来ません。ver1.0?のときは普通に表示できていたのですがこれはバグですか?それとも自分の使い方が間違ってるのでしょうか?

読み込み
MQO_MODEL model;
model = mqoCreateModel("output0.mqo",0.2);

出力
mqoCallModel(model);

でやってます。
【2008/02/18 03:33】 URL | #- [ 編集]


はじめまして。
ARToolKitで初音ミクシリーズを作っていたものです。
こちらのARToolKitの記事は大変参考になりました。ありがとうございます。

ニコ動界隈で配布しているソースについて補足なのですが、
DirectXで初めて書いたソースですので、いろいろおかしい部分があるかと思います。あくまで参考程度に利用していただければと思います。
また、モデルやモーションの読み込みは連番MQO方式で行っております。

モーションを付ける方法は、調べればいろいろあったのですね。
VRMLやLuaで簡単に利用できるようになればとてもおもしろくなりそうですので、期待しております。
【2008/02/19 01:01】 URL | #- [ 編集]


>b2oxさん
はじめまして,こんにちは.
参考になるコメントありがとうございます.
まったくご指摘のとおりであります.

>glDeleteTextures(1, tex_name)によってテクスチャを消してますけど
以前別の用途のために作った関数の名残りでして,
そのときは同じ変数を使って何度もテクスチャの再登録を
行うようなコードを前提にしていたのでglDeleteTextures()
を行っていました.おっしゃるとおり,今回のメタセコローダに
関して言えば,初期化してないので危ないし,同じtex_nameに対して
テクスチャを再登録を行うようなことはないので不要ですね.

>あと、mqoCreateModel関数とかのGL_COMPILE_AND_EXECUTEはGL_COMPILEで良いんじゃないでしょうか。
あっ! そのとおりです!
以前書いたコードやサンプルコードからそのまま持ってきてるところが
ところどころあるんですが,そういうところで凡ミスやってますね…

ARToolKit with Luaの開発が興味深くてときどきサイトを拝見しています.
Lua面白そうですね.今度やってみようと思います.
【2008/02/19 02:18】 URL | なおき #F54KmX5Y [ 編集]


>はじめまして。GLMetaseq.h (Ver2.0) を使わせていただいたのですが、
>このヘッダを使ってmqoを表示出来ません。

申し訳ありません.情報が少なすぎて判断できません.
【2008/02/19 02:21】 URL | なおき #F54KmX5Y [ 編集]


>ARToolKitで初音ミクシリーズを作っていたものです。

はじめまして,こんにちは.
ニコ動界隈でご活躍されている方ですね!
私自身,DirectXへの移植はやろうと考えつつもやってない状況だったので
このタイミングでのソース公開は非常にありがたかったです.
(なにげに行列まわりが面倒そうだなとか思ってたんですよ)
影やらなにやらやろうと思ったらDirectXのほうが良さそうですね.
ただ,Windows限定になっちゃいますけど.
今後もご活躍に期待しています.
【2008/02/19 02:21】 URL | なおき #F54KmX5Y [ 編集]


Irrlicht, OGRE, OpenSceneGraphといったライブラリを使うとOpenGL, DirectX両対応で更にマルチプラットフォームってことができるんでしょうけどね。
どれも影とか煙っぽいのとか使えるみたいですし。

IrrlichtとOGREのほうは組み合わせてみたよとか組み合わせてるんだけど詰まってる助けてみたいな発言がフォーラムに投稿されてるのは見たんですが、
実際に動く物を置いてる人はまだいないみたいですね。

OpenSceneGraphは既にARToolKitのプラグイン(OSGART)があって、
さらにそれをLuaスクリプトから制御することも出来るようです。(実際に手元で動かしたわけではないですけど(^^;)

OSGARTのGalleryには別のARライブラリ(Bazar)を使った例も載っていました。
http://www.artoolworks.com/community/osgart/gallery.html
多分このサンプルでは本の表紙画像がマーカーになってるんだと思います。
Bazarはカメラからの取り込みと歪み補正とかにOpenCVを使ってるみたいです。
【2008/02/19 11:27】 URL | b2ox #7jRj3iUs [ 編集]


ニコ動のARToolKitで初音ミクシリーズを見て、自分もそれをやりたい一心で、先月はじめてプログラミングなるものに足を踏み入れてHello Worldした初心者Macユーザーです。人間のモチベーションはまことに不思議なところから発揮されるものだと、自分にあきれていますw

Windows依存のBITMAP構造体周りをどうするかでつまづいていた矢先、windows.h 非使用バージョンの到来はちょっとしたブレークスルーになり、インクルードするものをもう少し書き換えてやるだけでMacでもとりあえずコンパイルできました。なぜか肝心のモデルが表示されず、白いワイヤーフレームの球体しか出てこないのですが、それにしてもプログラミングとか3Dの扱いとか、想像していたよりは簡単なものなのですね。おかげさまで新しい興味対象を開拓しつつあります。なおきさん並びににミクARの方に一言お礼を言いたくてコメントさせていただきました。

しかしこの球体は何なんだ…?
【2008/02/19 16:24】 URL | アルタ #4pMdFLgw [ 編集]


>b2oxさん
>Irrlicht, OGRE, OpenSceneGraphといったライブラリを使うと・・・
おっと.そんなものがあるんですね.
CG系はド素人なものでそういう情報が一番ありがたいです.
影とかフォグもいいですが,個人的には物理演算をやりたいです.

Bazarは使ってみようと思ってるんですが,デスクトップにEXEを転がしたままになってます(笑) そろそろ他のライブラリにも手を出そうと思います.ARTagとかも.
【2008/02/19 19:42】 URL | なおき #F54KmX5Y [ 編集]

管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
【2008/02/19 19:48】 | # [ 編集]


>アルタさん
はじめましてこんにちは.
プログラミングやるときは何か具体的な目標があったほうがいいので,ニコ動見て触発されてHello worldしちゃうのはぜんぜんアリですよ!

>しかしこの球体は何なんだ…?
それは多分光源の位置を表した球体ですね.egLightOn()のなかで
描画するようになってます.disp_light = FALSEとしたら消えますよ.

ところでMacの場合,GL関係のヘッダのインクルードはこれでよろしかったでしょうか?↓
(ディレクトリが違うんですよね?)
#include <OpenGL/gl.h>
#include <GLUT/glut.h>

※次回修正時に,Macでの使用にも対応しておこうと思います.
【2008/02/19 19:56】 URL | なおき #F54KmX5Y [ 編集]


>DirectXについて
行列の変換もかなり適当ですが、少しでも参考になれば幸いです・・;
DirectXは3Dゲーム開発関係の書籍が豊富なので助かりました。
上記の「t-pot」さんのページも参考になりましたし、情報が豊富なのが利点かなと思います。
ただ、やっぱりWindows限定になってしまうのは痛いですね;

物理演算といえば、『Nao_u』さんという方が、ARToolKitとPhysXを組み合わせて色々やっているのを見たことがあります。(既にご存知でしたらすいません)
やってる内容がクオリティ高くてビビりました。

>アルタさん
はじめまして、こんにちは。なんと言うか、こちらこそありがとうございます。
私も似たようなものですし、なおきさんのおっしゃる通りだと思います。
【2008/02/20 00:32】 URL | ARToolKitで初音ミクの人 #- [ 編集]

>なおきさん
ヘッダに関して
<OpenGL/gl.h>と<GLUT/glut.h>はToolKit付属のSimpleTest などで ifdefが __APPLE__ の場合に読み込んでる2つですよね。Exampleをコピペしてばかりで中身に関してはよくわかってないのですが、その2つで確かにSimpleTestは正常動作しました。間違いないと思います。

球体に関して
なるほど、確かに disp_light で消えました。ありがとうございます。“変なもの”ではなかったようで一安心です。
ということは、egLight の動作までは問題なくて、GLMetaseq2 のどこかに、当方の環境でのモデルの表示を妨げる原因があるのでしょうかね。もし何か進展があったらまたご連絡します。
【2008/02/20 10:20】 URL | アルタ #4pMdFLgw [ 編集]


ちょっと細かいことをちくちくと指摘しますね(^^;

GLMetaseq2.hのmqoMakePolygon関数ですが、
glEnable(GL_BLEND);glBlendFunc(GL_ONE,GL_ZERO);
だとglDisable(GL_BLEND)と同じ効果で無駄に処理を増やすだけだと思います。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
を用いるべきだと思います。
GL_BLENDが有効になるのはテクスチャがあるときだけになってしまってますが、
テクスチャがなくてもα値は有効にするべきだと思います。
できればスムージング角を考慮した頂点法線を設定するようにした方が表示が綺麗になって良いと思います。
ポリゴンを生成する段階でスケールを適用するのではなく頂点を読み込む時に適用した方が無駄が少ないと思います。

mqoSnormalはnorm=0のときのことも一応考えておいた方が良いかも。
【2008/02/20 22:09】 URL | b2ox #7jRj3iUs [ 編集]

>b2oxさん
心強いデバッグのサポートありがとうございます.
だめだめなソースでホント恐縮です.すみません(--;

ブレンド処理のところですが,テクスチャを張った場所の一部分が透けて
おかしくなったり,テクスチャのない場所で透けさせたくないのに透けられたりと
いろいろやってるうちによくわからんなくなってきたので,とりあえず
glBlendFunc(GL_ONE,GL_ZERO)=ブレンドしない にしたという経緯が
あります.で,逃げました.(で,足跡残しました)

>できればスムージング角を考慮した頂点法線を設定するようにした方が表示が綺麗になって良いと思います。
見てのとおり面法線でとりあえず逃げてたんですが,やっぱり綺麗にしたいですよね.
頂点法線の計算方法とか調べたんですが,頂点を共有する面を探すあたりとか,
ややめんどそうですね(素直にやればいいんでしょうけど).

・・・とまぁそんな感じで若干お手上げ気味なのでmqoMakePolygon()の部分に
関して有用なコードがございましたらご教授いただけると幸いです.

>ポリゴンを生成する段階でスケールを適用するのではなく頂点を読み込む時に適用した方が無駄が少ないと思います。

うっ お気づきになられましたか.
これだとロード時に余計な計算をやって時間がかかってしまいますね.
スケーリングについては自前で計算せずに,モデル作成前に
glScaleをやろうかと思うんですが,どっちがいいですかね?
【2008/02/21 01:56】 URL | なおき #F54KmX5Y [ 編集]


管理人様 へ 
先日はVRMLの件で失礼いたしました。Ver2の公開ありがとうございます。
VRML動画のほうご紹介下さっていることも知らずに削除してしまいました・・・(;・∀・)
理由は某ソフトの広告プログラムへの個人的な見解です。(笑 
お気遣い頂いたにもかかわらず、お手間ばかり取らせてしまい恐縮です。m(_ _"m)

VRML関連。とても面白いのですが、枯れた技術なはずなのに、意外にもソフトが
なくて困ります・・・。Blender用にまともなVRML97プラグインが書けるといいの
ですけど。その他、OpenFXがありましたが、癖ありそうです。

c++のお勉強傍ら、wrlファイルにテキストエディタでキーをうち、頂点コピペで
モーフィングしてみてるとこです。とても面倒です・・・(笑
【2008/02/21 04:21】 URL | ほよよ #z8Ev11P6 [ 編集]

>ほよよさん
>VRML動画のほうご紹介下さっていることも知らずに削除してしまいました・・・(;・∀・)
>理由は某ソフトの広告プログラムへの個人的な見解です。(笑 
おっと,それはちょっと残念です.
でも,VRMLというひとつの活路が見出せたので感謝しております.

VRMLがWebブラウザ上で動くのをはじめてみたときはうぉー!と感動したものですが,
製作環境が整っていないのはいかんともしがたいですね.

本文にもちらっとかきましたが,せっかくARToolKitがVRMLを読めるのに,流行りのボーンベースのモーション作成ツールがVRML出力に対応してないのがちょっと痛いです.
【2008/02/21 08:36】 URL | なおき #F54KmX5Y [ 編集]


明石高専の情報工学研究部OBのやつです。
ご紹介に預かり光栄です。(遅
スキン・ボーンの実験を早くやりたかったので
やっつけで書いたコードばっかりですが、奇跡的に動いています。

>それなりに「読む」ことが必要かもしれません.
...やっぱり読みにくいですよね。
公開してるんだからそれなりにがんばります。
(とか言いつつ最近は3DCGよりDTMとか信号処理に傾き気味ですが...)

管理人さんも画像処理の研究がんばってください。
【2008/05/11 04:28】 URL | rydot #JkEXMF3o [ 編集]

>rydotさん
こちらこそ非常に有益なソースを公開してくださって感謝の極みです.
メタセコイアのOpenGL用のローダが需要があるはずなのに,数えるほどしか
存在してなくて,ほとんどの場合ソース非公開っていうのが現状なんです.
そんな中モーション再生までやっちゃう凄いのが公開されてるぞ!と,感動しました.

私が公開したものも,他の人の手によっていろいろと改変が加えられています.
オープンソース効果といいますか,ソース公開すると結果的に自分も得するみたいです.

>管理人さんも画像処理の研究がんばってください。
きゃー 最近本業を忘れそうなくらいARToolKit漬けになっているので
そろそろ目を覚まさないと・・・(笑) がんばります.
【2008/05/11 20:11】 URL | なおき #F54KmX5Y [ 編集]




この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://kougaku.blog28.fc2.com/tb.php/282-b824e632
この記事にトラックバックする(FC2ブログユーザー)

[ARToolKit]夢を現実にちょっと近づける技術。

はじめに、コチラをご覧ください。 【ニコニコ動画】ARToolKitでリモコンタチコマ ニコニコ動画が見れない人はコチラ http://jp.youtube.com/watch?v=OmXsv... 日々平穏【2008/02/17 21:38】