今日の一言
2009/09/08(Tue) OpenGLで3Dモデルを読み込む [長年日記] 19:30現在曇 25℃
_ [研究関係][OpenGL]OpenGLで3Dモデルを読み込む
!!!全般的なメモ!!! 大体の場合、サンプルでは.hファイルしか読み込んでいないが、.cファイルもインクルードしないとコンパイル出来ない場合が多い(自分の知識不足?)。
あと、windowsとlinuxで当然読み込むインクルードファイルは変わってくるので適時修正する。(パスとかも要確認)
細々した修正はメモっていないので適当に頑張れ。
_ 「vrml(.wrl)を読み込んでみる」
このサイト (http://www.komoto.org/opengl/sample12.html) を参考にやってみた。
成功。読み込めた。
が、別の複雑な形状のモデルでやると失敗した。残念。
_ 「mqoを読み込んでみる」
GLMetaseq(http://kougaku-navi.net/ARToolKit.html#MakeModel)を使ってみる。
参考サイト:
http://kougaku-navi.net/ARToolKit.html#MakeModel(工学ナビ)
http://wiki.livedoor.jp/mikk_ni3_92/d/%bc%c2%c1%a9%ca%d410
工学ナビにあったサンプルはwindows用だったので、それと下のサイトのサンプルを混ぜて使う。
・・・コンパイルできない。
glGenBuffersARBが初めて出てきたとか言われる。
どうやら下のHPの方も環境がだいぶ違う模様。
とりあえずsynapticでlibglewを選択してglewをインストール。
結局関係なかった...?
よく覚えていないが、glewをインストールしたらglGenBuffersARBとかのエラーメッセージが変わった気がする。
よく分からん。
一応調べた内容をメモっとく
◆glewとかglut使うときのビルドオプション
glut : -lglut
glew : -lGLEW ※大文字だから気をつける
ちなみにglut.hよりも先にglew.hを記述する必要がある。
インクルードファイルに色々追加。
#include <ctype.h>
#include <string.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include "GLMetaseq.h"
#include "GLMetaseq.cpp"
ちなみにmakeはこんな感じで。
g++ -I/usr/local/include -I/usr/include/GL -L/usr/local/lib -lGL -lGLU -lglut -L/usr/X11R6/lib -lX11 -lXi -lXmu test.cpp -o test
↑無駄が多いのは分かってるが、面倒なので関係しそうなものを片っ端から指定してみた。
GLMetaseq を使ったプログラムでエラーが出る場合は…
以下引用
そんなときは GLMetaseq.c の 205行目 のコメントアウト(//)を外してからコンパイルしなおしてみてください.
g_isVBOSupported = 0;このフラグは,vertex_buffer_object(使用する頂点情報をあらかじめグラフィックカードに渡して高速化する仕組み)をサポートしているかどうかのフラグなのですが,グラフィックカードのドライバの問題で正常にチェックできないことがあるようです.また,Windows XP Service Pack 3 にアップデートした後でこの問題が生じることもあるようです.
うん、それ無理。
そもそもg_isVBOSupportedが無いって言われるし。
g_isVBOSupportedが0の時に動かない部分を完全に削除。
動いたぜ。
(fix_GLMetaseqと名前をつけて保存)
以下工学ナビから使い方を引用
GLMetaseq の使い方
本ライブラリはヘッダとソースで配布しています.あなたが作成しているプログラムのプロジェクトに GLMetaseq.h と GLMetaseq.c を追加し,プログラム中で GLMetaseq.h をインクルードしてください. C++で使う場合,GLMetaseq.c の拡張子を.cppに変更する必要はありません.以下に関数の使い方を示します.
【1】 初期化
最初に初期化を行います.初期化を行うタイミングはウィンドウを生成した後です. ARToolKitのプログラムであればargInit()より後です.
mqoInit();
【2】 ファイルからのモデルの読み込み
MQOファイルをロードします.ロードされるとMQO_MODEL型の変数にモデルの情報が記録されます.引数はモデルのファイル名とスケールです.スケールは1.0で当倍です.スケールを0.5とすると半分のサイズで表示されます.
MQO_MODEL model;model = mqoCreateModel( "ninja.mqo", 1.0 );【3】 モデルの呼び出し
MQO_MODEL型の変数を指定するとそのモデルがシーンに呼び出されます.この関数は描画処理のところで使います.メタセコイア上ではY軸が上を向いてますが, ARToolKitのマーカではZ軸が上を向いていますので,適宜X軸回りに90度回転させてください.
mqoCallModel( model );
【4】 モデルの消去
プログラム終了時など,モデルが不要になった時点でモデルを削除してください.
mqoDeleteModel( model );
【5】 終了処理
プログラム終了時にはmqoCleanup()関数によってGLMetaseqの終了処理を行ってください.
mqoCleanup();
_ 他のmqoファイルでも試してみる。
とりあえずニコニコ動画で検索。
*EVA量産型*
配布先↓ PASS EVA (半角大文字で入力してください)
ありがたくいただいてみる。
mqoじゃないやん・・・
さかのぼって大本の製作者様のHP(http://nameniku.blog71.fc2.com/)に行ってみた。
ここ(http://nameniku.web.fc2.com/3dcg/)に3DCGのデータが置かれているようなので見てみる。
素晴らしい。
特にお嬢様。
早速読み込む。(drossel.mqo)
失敗。
サイズの小さい方でやってみる(simple_drossel.mqo)
成功!
・・・が、
このテクスチャは対応できないフォーマット→drosel_texture.png MQOファイル読み込み: 最大オブジェクト数を超えました[50]
とか言ってる。
いろいろと試す。
三次元CG@七葉からnh0428.zipを借りてきた。
OK。
やはり複雑過ぎたりサイズが大きすぎるとSegmentation faultになってしまうようだ。
さてどうするか・・・