ここから本文です

OpenGLプログラムについて

vam********さん

2010/3/2215:17:40

OpenGLプログラムについて

以下のサイトのOpenGLのプログラムを、VisualC++とGLUTを使って編集していて、
ボール状の物体と、自分で追加した直方体の物体が衝突した場合に、何らかのイベントを組み込みたいと考えていますが、
ボール状の物体が動いているときの位置がどの変数に入っているのかがわからない状態です。

プログラミングに詳しい人が居ましたらご教授お願いします。

あと、メタセコイアで作ったモデルをこのプログラムに組み込んで表示させる方法もわからないので、できたら教えてください。

http://www.natural-science.or.jp/article/20091114182234.php

補足確かにp[i].x,y,zが位置のようでした。
しかしこの値を使って簡単なイベントを行ってもダメでした。
値は逐一更新されないのですかね・・
メタセコイアの読み込みも手順とサンプルを確認しながらやってみましたが、
以下の様なエラーが6つ出てコンパイルできない状態です。

"extern "C" void __cdecl mqocallmodel(struct mqo_object)"
(mqoCallModel) が関数 "void __cdecl Display(void)" (Display) で参照されました。

閲覧数:
907
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

邪威庵さん

編集あり2010/3/2303:59:25

void DrawStructure(bool flag)関数内で、

glTranslated(p[i].x , p[i].y , p[i].z );//平行移動値の設定

となっていますので、p[i].x , p[i].y , p[i].z、が位置のようです( i はボールの番号)。

メタセコイア読み込みは、http://kougaku-navi.net/ARToolKit.htmlに「GLMetaseq.zip」というのがあります。



<補足への回答>
void DrawStructure(bool flag)関数の
ここらへん↓が値の更新

p[i].vx += ax * dt;
p[i].vy += ay * dt;
p[i].vz += az * dt;
p[i].x += p[i].vx * dt;
p[i].y += p[i].vy * dt;
p[i].z += p[i].vz * dt;

で、次のif文↓が床との衝突判定になっています。

if(p[i].z < 4 && abs(p[i].x) < floor_s && abs(p[i].y) < floor_s ){
p[i].z = 4.0;
p[i].vz = -hanpatu * p[i].vz;
}

ので、この辺を参考に、直方体との衝突条件を書き加えていくのが基本のようです(このプログラムの場合)。


GLMetaseqは、VisualStudio 2008でWin32コンソールアプリ(空のプロジェクト)を作り、「sample_GL」の「GLMetaseq.c」と「sample_GL.c」を読み込んでビルドしたら動きました。

質問した人からのコメント

2010/3/29 08:20:09

降参 ありがとうございました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる