前回からの続き
Qualcomm「QCAR」のImageTargetsの認識画像を変えてみる
の終わりに次は表示画像(ティーポッド)変えてみると言ってしまったので、続きです。。
さて、変更できるのかな?
変更するのはjni側のファイルです。(ImageTargets/jni)
ファイル名見ていくと、そのまんま”Teapot.h”というファイルがあります。
ファイルの中身はこんな感じ
#define NUM_TEAPOT_OBJECT_VERTEX 824
#define NUM_TEAPOT_OBJECT_INDEX 1024 * 3
static const float teapotVertices[NUM_TEAPOT_OBJECT_VERTEX * 3] =
{
11.222200, 0.110300, 20.030291, 10.302300, -4.461498, 20.030291, 10.152300,・・・・
};
static const float teapotTexCoords[NUM_TEAPOT_OBJECT_VERTEX * 2] =
{
0.608828, 0.354913, 0.609037, 0.414650, 0.627128, 0.412296, 0.626946, 0.353747,・・・・
};
static const float teapotNormals[NUM_TEAPOT_OBJECT_VERTEX * 3] =
{
-0.964496, 0.067011, -0.255454, -0.865037, 0.431362, -0.256198, -0.914727, 0.312709,・・・・
};
static const unsigned short teapotIndices[NUM_TEAPOT_OBJECT_INDEX] =
{
0,1,2, 2,3,0, 4,5,6, 6,7,4, 8,9,10, 10,11,8, 11,10,12, 12,13,11, 1,14,15, ・・・・
};
このファイル”Teapot.h”は、”ImageTargets.cpp”の中で参照されてオブジェクトを生成・表示してます。
今回は、MultiTargetのオブジェクト(皿とスプーン)に変えてみようとしました。
そこで、”Teapot.h”の中身(座標)をMultiTargets/jni/Cube.hに書き換えてみました。
では、実行してみましょう。
あれっ?変わらない・・・。
画像がおかしいのかな。と思い、
ImageTargets/assets/TextureTeapotBrass.png と TextureTeapotBlue.pngを差し替えて、再度実行。
形はティーポットで色はお皿のに。
というわけで心折れ、断念しました。ごめんなさい。
分かったこと
・座標は別のところで管理されている?
・OpenGLでオブジェクトは変えることができる(手順などが見つからないけど)
・3Dの知識がないまま進めると大変だった
・ARは楽しい!
何か分かったら更新します。と、一応書いておこう。
こんにちは。前回の3Dオブジェクトを変える記事にコメントした者です。
返信削除3Dオブジェクトを変えるのはなかなか難しそうですね・・・
私は今、エミュレーターでWebカメラを使えるようにしたけど、QCARのソースがよくわからなくて勉強中です;
QCARを使ってまた何かされたら是非記事を書いてください!
楽しみにしてます!
コメントありがとうございます。
返信削除QCARのソース難しいですよね。(ワタシもよく分かってません…)
日本語の情報少ないですし。
それでも、
やっぱりARはおもしろいのでいつか何か作ってみたいと思います。
また、何かやったらブログ書きますね!
お互い頑張りましょう(^-^)/
今日からARを始めてみて、こちらに辿り着きました。
返信削除3Dオブジェクトを変更する場合、.hファイルを書き換えたらcygwinからndk-buildしないと反映されませんよ~
匿名さん、こんにちは。
返信削除コメントありがとうございます。
ndk-buildですか、もう一度手順確認して試してみますね!
3Dオブジェクト変更するには、Teapot.hを変えるだけでよいのかな?不安・・・。
こんばんは。
返信削除今更ですが……
ndk-buildすれば良いということをここのコメント欄で見てやってみたのですが、うまくいきませんでした。
そこで、QCAR SDKをインストールしなおして綺麗な状態のSamplesフォルダのImageTargetsフォルダの中のTeapot.hを書き換えてndk-buildし、実行したところ、オブジェクトが変わりました。
その状態でもう一度Teapot.hの内容を最初に戻して再度ndk-buildし、実行してみたのですが、ポットは出てこず、書き換えた方のオブジェクトが表示されました。
ということで考えたのですが、一番最初にndk-buildしたときに影響が及ぼされる部分より、二回以降にndk-buildしたときに影響が及ぼされる範囲が狭くて、その範囲に入らないところにオブジェクトのデータが入っているような気がします。
初心者の長文失礼しました。
コメントありがとうございます。
返信削除なるほど!
リビルド or クリーンビルドしてみるとよいかもですね。
コマンドは、
リビルド:ndk-build -B
クリーン:ndk-build clean
こちらの環境は壊れてしまっていて、すぐに試せないです。。
androidの記事を参考にさせて頂いております。
返信削除リビルドするとオブジェクトの変更できました。
ただこのオブジェクト情報が書いてあるヘッダは意味不明ですね。
きっと頂点情報なんでしょうけど。
3Dで作ったオブジェクトからヘッダを作り出してくれるツールがあればいいのに・・・
ご報告ありがとうございます。
返信削除リビルドでオブジェクトの変更できたのですね!
> 3Dで作ったオブジェクトからヘッダを作り出してくれるツールがあればいいのに・・・
同じこと思っています。QCARのDeveloper Siteに何か情報ないかな。見てみます。