カレンダー

05月 │2017年06月│ 07月
- - - - 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 -

 プロフィール

はしもと

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

 工学ナビ

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

 作ったもの

 Twitter

 

 天気予報


 ブログ内検索

 カテゴリー

最新コメント

 RSSフィード

 リンク

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




工学ナビの中の人 はしもとのブログです. いろんなコトを研究的,工学的な視点で見つめます.
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【C/C++】 OpenGLで使えるメタセコイアモデルローダ
【09/02/07修正】 配布場所やサポート場所が変更になったので記事を修正しました.


mqo_loader.png
メタセコイアで作ったモデルをこんな風にOpenGLのプログラムで表示できます


■GLMetaseq
 最新版のGLMetaseqは工学ナビの以下のページで配布しています.

 「攻殻機動隊」「電脳コイル」の世界を実現! - ARToolKitを使った拡張現実感プログラミング
 → 自分で3Dモデルを作って現実の世界に表示させてみよう


■製作方針
 ・簡単に扱える
 ・CとC++の両方で使える
 ・ソースコードによる配布 (オープンソース)


■サポート
 質問やエラー報告は,工学ナビの掲示板に書き込んでください.みんなでよってたかって問題解決にあたれるようにするためです.スレッド作成時は,「GLMetaseqの×××について」のように,それとわかるようなスレッド名をつけてくださるとみんなが幸せになれます.


■改良版・派生版など
 GLMetaseqの旧バージョンをベースに作られているケースもあると思いますので,そのあたりはご注意を.使ってみて自分が気に入ったものを使ってください.
 
 ・BlackBoxLaboratory - ARToolKit with Lua (arl) にソース同梱 (b2oxさん)
 ・ニコニコ動画 - ARToolKitで初音ミク(その6):LIVE (DirectX版)
 ・ものおき(keiさん.C/C++/Java各種)


■この際言っておきたいこと

・工学ナビで配布されている最新版のGLMetaseqはkeiさんとの共同開発によるものです.(09/02/07現在)

・いちばん最初にリリースしたGLMetaeq.h(これも工学ナビで配布しています)は,最新版に比べると表示能力は劣りますが,必要最小限のコードなため,多少は読みやすいかもしれません.仕組みを知りたい場合や,移植を考えられている場合は,そっちもチラ見してみてください.


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

>ブレンド処理のところですが,テクスチャを張った場所の一部分が透けて

GLMetaseq.hの改造してて同じような症状に悩まされたんですけど、
モデルにテクスチャを貼る時に
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
貼り終わったら
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
ってやるようにしたらうまくいきました。


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

arlでは頂点法線とかも計算するようにしてるんで、
よかったらうちの改造版GLMetaseq(arl.7z の arl/src/GLMetaseq.c)を参考にして下さい。


>スケーリングについては自前で計算せずに,モデル作成前に
>glScaleをやろうかと思うんですが,どっちがいいですかね?

どっちが良いんでしょうね、僕にもわかりません(^^;
とりあえずメインループでglScaleを1個分節約できるかなと思って読み込み時点で適用するようにしてます。

#うちのは材質が未割り当ての面は0番の材質を使うようにしちゃってるな…
【2008/02/21 04:13】 URL | b2ox #7jRj3iUs [ 編集]

>b2oxさん
>モデルにテクスチャを貼る時に glTexEnvi
下地とテクスチャの合成に悩んでたんですが,まさにそういう関数
あったんですね.うぁー油断してました.ちょ赤本赤本w

>arlでは頂点法線とかも計算するようにしてるんで、 よかったらうちの改造版
>GLMetaseq(arl.7z の arl/src/GLMetaseq.c)を参考にして下さい。
*.7zを解凍できるツールをいれてなかったものでダウンロードして
しばらく放置しっぱなしだったんですが(笑),ソース同梱されてたんですね.
さっそく参考にさせていただきます.

>>スケーリングについては自前で計算せずに,モデル作成前に
>>glScaleをやろうかと思うんですが,どっちがいいですかね?
>どっちが良いんでしょうね、僕にもわかりません(^^;
>とりあえずメインループでglScaleを1個分節約できるかなと思って
>読み込み時点で適用するようにしてます。

いま配布してる最新版では,GL的に自然かな,という判断から
glScaleのほうを取っちゃいました.1コマンドの重みはいかに!?w

# 突き詰めると 「そもそもこの関数にスケール機能っているか?」 という
# とこまでいっちゃうんですよね.各自でglScaleしたらいいんじゃね?と.
【2008/02/21 09:00】 URL | なおき #F54KmX5Y [ 編集]


MinGW+MSYS環境(+Ruby)があればコンパイル出来るようにライブラリも含めて全部入れてます。
ちなみに、arl.7zは2/16に公開したのが最新版です。
【2008/02/21 11:09】 URL | b2ox #7jRj3iUs [ 編集]


工学ナビさんのGLMetaseq.hを拡張した
http://www.nicovideo.jp/watch/sm2477131
を見て、sample.c
http://cid-bc5c93d14c5ccef3.skydrive.live.com/self.aspx/mwsmod/sample.zip
で読み込んでみたのですが、ポリゴンをなめらかにするのがわかりません(><)
【2008/03/03 23:46】 URL | mws #EBUSheBA [ 編集]

>mwsさん
拡張版の情報をいただけたので非常に嬉しかったのですが,
中身までは僕の知るところではないので・・・・
そのプログラムの作者さんに直接お問い合わせいただくのがよろしいかと思います.
(力不足でごめんなさい.こちらでもそのあたりの勉強をしたいと思います)
【2008/03/05 13:42】 URL | なおき #F54KmX5Y [ 編集]


ポリゴン表示をなめらかにする方法については
"頂点法線 スムージング角"でググれば解説ページが見つかります。

sm2477131 のGLMetaseqV2Ex.cを見てみましたが、
sample.cを弄ったところでどうにかなるという物ではありません。
ポリゴン表示をなめらかにするにはポリゴンの各頂点に対して法線を計算し適用してやる必要があります。
GLMetaseqV2Ex.cは
・テクスチャを使っている面では法線を計算していないし設定もしていない
・テクスチャを使っていない面では面法線をそのまま頂点法線として使っている
・そもそもスムージング角のパラメータfacetを読み込んでいない
というようなコードなので、これらを適宜修正してやる必要があります。
主な修正箇所はmqoReadObject, mqoCallListObject, mqoMakeArray関数です。
【2008/03/05 20:37】 URL | b2ox #7jRj3iUs [ 編集]


はじめまして。GLMetaseqV2Ex作った人です。
いちいち連絡されるのもウザいだろうなと思って勝手にやってました。。。

えー法線まわりは(も?)よくわからなくてやっつけ仕事ですね…

ちょっと法線の勉強でもしてなおしてみます。
↑こんなレベルなので、適宜修正してつかっていただければと思います…

そういえばglScaleつかうと光のあたり方がおかしい気がして掛け算してたんだけど
法線がおかしかったからなのかな
【2008/03/06 10:38】 URL | kei #- [ 編集]


glScaleを使うと法線まで拡大縮小されてしまうので
glEnable( GL_NORMALIZE )とかで正規化しないといけないみたいです。
http://sky.geocities.jp/freakish_osprey/opengl/opengl_minitips.htm
http://a-few-steps-stroll.blog.ocn.ne.jp/blog/2006/04/glsca.html

法線まで拡大されるのは困るなぁとも思いましたが、
よく考えてみるとglScaleは拡大縮小のための行列を掛けてるだけなので
同様に回転行列を掛けてるglRotateで法線が変わらないとおかしなことになるから
法線にも掛けてやらないと拙いんですね。
【2008/03/06 11:55】 URL | b2ox #7jRj3iUs [ 編集]


>mwsさん
ソース直してみました。なめらかになるかと思います。
sm2477131 にアドレスはっつけてます。

>b2oxさん
>glEnable( GL_NORMALIZE )とかで正規化しないといけないみたいです。
ちゃんと対応するものが用意されてるんですね!
勉強になります。
【2008/03/06 20:45】 URL | kei #- [ 編集]


>keiさん
>b2oxさん
お二人ともいろいろとありがとうございます!
当方,力不足で申し訳ありませんorz

改良版などのご報告はどんどんしていただけるとありがたいです.
こちらでご紹介させていただきます.
【2008/03/07 01:12】 URL | なおき #F54KmX5Y [ 編集]


あぁぁ、すいませんスイマセンorz
昨日うpしたやつは使い物になりませんでした。。。修正しました;;

紹介してくださるのはうれしいですが、動画の出来がひどすぎなので…
なにかまっとうなの、あげなければ!

一つやばそーなとこみつけたので報告
(といっても自分もなおしてませんし、ほとんどの場合大丈夫かな?)
mqoGetDirectory
テクスチャの読み込みでパス名が多バイト文字で''(0x5c)や'/'(0x2f)がまざってると
読めないかも。
試してないのでなんともいえませんが。
(各自、きおつけてね!って注意書きだけでいいかなーというきもしますが…)
【2008/03/07 18:44】 URL | kei #- [ 編集]


glmetaseq.h(269) : error C2440: '=' : 'const char *' から 'char *' に変換できません。

エラーが表示してしまうのですが
【2008/09/28 22:54】 URL | #- [ 編集]


どうしたらいいでしょうか? 初心者なのでいまいち使い勝手が分からないのですが
【2008/09/28 23:33】 URL | #- [ 編集]


>名無しの人
単発のエラーだけ見せられてもお答えできません.
コンパイルした環境とか具体的な判断材料がないとわかりません.
それと名前くらい名乗ってくれませんか? あまりにも無礼じゃないですか?

# あと,エラーがどうのこうのというレベルの話はBBSのほうに
# ポストしたほうがコメント返してくれる人が多いです.
【2008/09/28 23:45】 URL | なおき #F54KmX5Y [ 編集]

お聞きしたいことが・・・
メタセコイアのデータを元に利用させてもらっているものです。
ちょっとお聞きしたいのですが、メタセコイアで作成したオブジェクトを
指定して表示することってできるんでしょうか?
例えば、保存した中に立方体と球体がオブジェクトとしては別々に存在したとして、球体のみ指定して表示することは可能でしょうかということなんですが。
それと、読み込んだメタセコイアデータをOpenGL内で色や自己発光度を変更することは可能なんでしょうか?長々とすみません。
【2008/09/29 11:54】 URL | めん #- [ 編集]


>例えば、保存した中に立方体と球体がオブジェクトとしては別々に存在したとして、
>球体のみ指定して表示することは可能でしょうか

プログラム側で表示したい対象を決める機能は現在用意していません.
「非表示に設定されているオブジェクトは表示されない」というだけです.

>読み込んだメタセコイアデータをOpenGL内で色や自己発光度を変更することは
>可能なんでしょうか?

残念ながら,こちらも現状のGLMetaseqの機能としてはサポートしてません.

いずれも「ちょっと頑張ればできる」ことなので,コメントを頼りにご自分で
glmetaseqをHackしてみてください.
【2008/09/30 01:11】 URL | なおき #F54KmX5Y [ 編集]


pspでも使えるように、glのList一式を使わない形のソースコードを配布してくださると、とても嬉しいのですが
【2008/11/23 10:43】 URL | #- [ 編集]




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














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


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

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。