-1

衝突する 2 つの立方体からなる単純なプログラムを作成しました。それらを動かして衝突をテストすると、問題なく動作しますが、立方体を回転させると、衝突が台無しになります。openGL がオブジェクト座標を変更しないために発生することを理解していますが、どうすればこれを達成できますか?

私はこのような新しい座標を計算しようとしました:

new.x = coordinates.x * cos(degrees) - coordinates.y * sin(degrees);
new.y = coordinates.x * sin(degrees) + coordinates.y * cos(degrees);

しかし、new.x と new.y は正しくありません。

モデルビューに(new.x、new.y、0、1)を掛けて、これも試しました:

GLdouble modelview[16], NEWVERTEX[4];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

nmview[0] = modelview[0] * new.x + modelview[4] * new.y + modelview[8] * 0 + modelview[12] * 1;
nmview[1] = modelview[1] * new.x + modelview[5] * new.y + modelview[9] * 0 + modelview[13] * 1;
nmview[2] = modelview[2] * new.x + modelview[6] * new.y + modelview[10] * 0 + modelview[14] * 1;
nmview[3] = modelview[3] * new.x + modelview[7] * new.y + modelview[11] * 0 + modelview[15] * 1; 
4

1 に答える 1

1

まず、OpenGL はローカライズされたラスタライザーであり、点、線、および三角形のみを認識します。OpenGL には幾何学的オブジェクトはなく、シーンもありません。

2番目: 最初から、OpenGLは衝突検出を行わず、OpenGL側のオブジェクトで「変更」できるものは何もないことがすぐにわかります。自分で衝突検出を行うか、サードパーティのライブラリを実装する必要があります。シーンのすべての変更は、OpenGL で全体を再描画することで反映されます。


PS: 質問は一種の FAQ です。

于 2013-02-27T23:56:52.620 に答える