ARToolKitの勉強中の学生です。
"3Dキャラクターが現実世界に誕生!ARToolKit拡張現実感プログラミング入門"を購読しています。
おかげで、マルチマーカを使うサンプルプログラムを動作させることができ、よりARToolKitに興味が湧きました。
そこで私は、このプログラムを少し工夫してもっと面白いプログラムにしようと思い、
マーカが隠れたらループで音が鳴るようにしたいと考えました。
探検
ARToolKitマルチマーカを使うプログラムが難しい件
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2012/09/16(日) 20:39:52.212デフォルトの名無しさん
2012/09/16(日) 20:40:44.51 そこでまずはPlaySound関数を使用するための準備として、
#pragma comment(lib,"winmm")
winmm.libをリンクします。次に
int org = 0;
orgというオリジナルの変数(グローバル関数)を作り、そしてマルチマーカを使うサンプルプログラムの
3Dオブジェクトの描画を行う関数の3Dオブジェクトを出現させる部分のソースコードを以下のように書き足しました。
#pragma comment(lib,"winmm")
winmm.libをリンクします。次に
int org = 0;
orgというオリジナルの変数(グローバル関数)を作り、そしてマルチマーカを使うサンプルプログラムの
3Dオブジェクトの描画を行う関数の3Dオブジェクトを出現させる部分のソースコードを以下のように書き足しました。
3デフォルトの名無しさん
2012/09/16(日) 20:41:27.48 if(visible >= 0)
{
//マーカが見えている場合
mySetLight(); //光源の設定
glEnable(GL_LIGHTING); //光源ON
mySetMaterial(); //材質特性の適用
glutSolidTeapot(20.0); //ソリッド表現のティーポット
glDisable(GL_LIGHTING); //光源OFF
org--;
}
else if(org >= 3)
{
//マーカが3つ以上隠れているとき
PlaySound("se_sad02.wav",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC); //wavファイル再生 getchar();
}
else
{
//マーカが見えていない場合
glColor3f(0.0, 0.0, 1.0); //色指定
glutWireTeapot(20.0); //ワイヤーフレーム表現のティーポット
org++;
}
{
//マーカが見えている場合
mySetLight(); //光源の設定
glEnable(GL_LIGHTING); //光源ON
mySetMaterial(); //材質特性の適用
glutSolidTeapot(20.0); //ソリッド表現のティーポット
glDisable(GL_LIGHTING); //光源OFF
org--;
}
else if(org >= 3)
{
//マーカが3つ以上隠れているとき
PlaySound("se_sad02.wav",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC); //wavファイル再生 getchar();
}
else
{
//マーカが見えていない場合
glColor3f(0.0, 0.0, 1.0); //色指定
glutWireTeapot(20.0); //ワイヤーフレーム表現のティーポット
org++;
}
4デフォルトの名無しさん
2012/09/16(日) 20:44:24.43 マルチマーカの6つのマーカの内1つが隠れた場合orgをインクリメント(+1)して、見えたときorgをデクリメント(-1)します。
orgが3以上になったとき、PlaySound関数を使って指定したwavファイルをループ再生するというプログラムにしたかったのですが、
このソースでコンパイルすると、Webカメラでマーカを映した瞬間映像をキャプチャしていた画面がフリーズして、
指定していたwavファイルがループ再生されるという結果になってしまいました。
どのようなソースコードを書けば正常に動作するのでしょうか?
ご教授願いますm(_ _)m
orgが3以上になったとき、PlaySound関数を使って指定したwavファイルをループ再生するというプログラムにしたかったのですが、
このソースでコンパイルすると、Webカメラでマーカを映した瞬間映像をキャプチャしていた画面がフリーズして、
指定していたwavファイルがループ再生されるという結果になってしまいました。
どのようなソースコードを書けば正常に動作するのでしょうか?
ご教授願いますm(_ _)m
2012/09/16(日) 20:48:35.76
getchar() から処理が帰ってきていないというオチではないですよね
それはそうと、この質問は同じ本を持っていない人はレスお断りですか?
それはそうと、この質問は同じ本を持っていない人はレスお断りですか?
2012/09/16(日) 20:55:20.03
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
7デフォルトの名無しさん
2012/09/16(日) 21:04:28.60 >>5
getchar();がないとwavファイルを再生してくれません。
同じ本を持っていなくてもレス構いません。
ARToolKitは基本3Dオブジェクトの描画の部分しか自分で作成しませんので。
マルチマーカとは、複数のマーカを一つのマーカとして処理するプログラムです。
6つのAからFまであるマーカの内、3つが隠れたら音を鳴らすプログラムにしたいのですが、
私のプログラムですと、説明の通りWebカメラでマーカを映した瞬間キャプチャ画面がフリーズしてしまいます。
ですのでアドバイス頂けると幸いです。
getchar();がないとwavファイルを再生してくれません。
同じ本を持っていなくてもレス構いません。
ARToolKitは基本3Dオブジェクトの描画の部分しか自分で作成しませんので。
マルチマーカとは、複数のマーカを一つのマーカとして処理するプログラムです。
6つのAからFまであるマーカの内、3つが隠れたら音を鳴らすプログラムにしたいのですが、
私のプログラムですと、説明の通りWebカメラでマーカを映した瞬間キャプチャ画面がフリーズしてしまいます。
ですのでアドバイス頂けると幸いです。
2012/09/16(日) 21:10:17.50
9デフォルトの名無しさん
2012/09/16(日) 21:24:15.32 //============================================================================
//3Dオブジェクトの描画を行う設定
//============================================================================
void DrawObject(double trans_cr[3][4], double trans_rm[3][4], int visible)
{
double Tcr[16]; //座標変換行列Tcr(基準マーカ座標系→カメラ座標)
double Trm[16]; //座標変換行列Trm(各マーカの座標系→基準マーカ座標系)
//OpenGL形式の行列変換
argConvGlpara(trans_cr, Tcr);
argConvGlpara(trans_rm, Trm);
//行列演算
glMatrixMode(GL_MODELVIEW); //モデルビュー行列を指定
glLoadMatrixd(Tcr); //現在の行列に座標変換行列Tcrをロード
glMultMatrixd(Trm); //現在の行列と座標変換行列Trmを乗算
//3Dオブジェクトの描画
glTranslatef(0.0, 0.0, 23.0); //マーカに載せるために平行移動
glRotatef(90.0, 1.0, 0.0, 0.0); //ティーポットを立たせるために回転
mySetMaterial();
これの続きが>>3です。
//3Dオブジェクトの描画を行う設定
//============================================================================
void DrawObject(double trans_cr[3][4], double trans_rm[3][4], int visible)
{
double Tcr[16]; //座標変換行列Tcr(基準マーカ座標系→カメラ座標)
double Trm[16]; //座標変換行列Trm(各マーカの座標系→基準マーカ座標系)
//OpenGL形式の行列変換
argConvGlpara(trans_cr, Tcr);
argConvGlpara(trans_rm, Trm);
//行列演算
glMatrixMode(GL_MODELVIEW); //モデルビュー行列を指定
glLoadMatrixd(Tcr); //現在の行列に座標変換行列Tcrをロード
glMultMatrixd(Trm); //現在の行列と座標変換行列Trmを乗算
//3Dオブジェクトの描画
glTranslatef(0.0, 0.0, 23.0); //マーカに載せるために平行移動
glRotatef(90.0, 1.0, 0.0, 0.0); //ティーポットを立たせるために回転
mySetMaterial();
これの続きが>>3です。
10デフォルトの名無しさん
2012/09/16(日) 21:32:32.8711デフォルトの名無しさん
2012/09/16(日) 21:35:14.26 ちなみに私がいじる前のサンプルプログラムはこちらです。
if(visible >= 0)
{
//マーカが見えている場合
mySetLight(); //光源の設定
glEnable(GL_LIGHTING); //光源ON
mySetMaterial(); //材質特性の適用
glutSolidTeapot(20.0); //ソリッド表現のティーポット
glDisable(GL_LIGHTING); //光源OFF
}
else
{
//マーカが見えていない場合
glColor3f(0.0, 0.0, 1.0);//色指定
glutWireTeapot(20.0); //ワイヤーフレーム表現のティーポット
}
if(visible >= 0)
{
//マーカが見えている場合
mySetLight(); //光源の設定
glEnable(GL_LIGHTING); //光源ON
mySetMaterial(); //材質特性の適用
glutSolidTeapot(20.0); //ソリッド表現のティーポット
glDisable(GL_LIGHTING); //光源OFF
}
else
{
//マーカが見えていない場合
glColor3f(0.0, 0.0, 1.0);//色指定
glutWireTeapot(20.0); //ワイヤーフレーム表現のティーポット
}
12片山博文MZボット ◆0lBZNi.Q7evd
2012/09/16(日) 22:05:43.01 PlaySoundが短い時間に何度も呼び出されて音が出ないんだと思う。
音を出すときに一回だけPlaySoundを呼んで、止めるときに
PlaySound(NULL,NULL,SND_PURGE);を呼ぶ
音を出すときに一回だけPlaySoundを呼んで、止めるときに
PlaySound(NULL,NULL,SND_PURGE);を呼ぶ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 [お断り★]
- 山里亮太、フィリピンに子ども食堂を建設 「偽善者」「日本の子どもを助けるべき」の声があっても活動を続ける理由 [Anonymous★]
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 ★3 [Hitzeschleier★]
- なぜリベラルは人気がないのか 斎藤幸平さんが指し示す未来への道筋:朝日新聞 ★4 [少考さん★]
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 [少考さん★]
- 【芸能】粗品 「間違ったお笑いの常識が放送されている」「テレビ見てる素人って、笑い声でしか面白いかどうか判断できない。可哀想」 [冬月記者★]
- 他サポ2025-302
- 【NJPW】新日本プロレスワールド part.2431
- 阪神競馬5回4日目 阪神JF
- 第80回甲子園ボウル 立命館大学 vs 関西学院大学★1
- 中山競馬5回4日目その2カペラエス
- 中京競馬5回3日目
- 維新幹部「高市さん懇願します…解散しないように懇願します…」 [931948549]
- 女の子と遊びたい
- 【悲報】すまん何で日本ってこんなに反『中国』が増えたんだ?ネトウヨどころかそこらの一般人レベルでもゴロゴロいる [483447288]
- あ、出ちゃう、イクッ😫💦🏡
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪★6
- ( ・᷄ὢ・᷅ )デカいんで
