QGLWidget と OpenGL を使用して、Qt (4.8.2)(VS 2008) でグラフィック アプリケーションをコーディングしています。アプリケーションの簡単な説明は次のとおりです。これは物理シミュレーションです。2 つのスレッドで構成されます。メイン アプリケーション スレッドは、シーンの描画 (QGLWidget サブクラス) とイベントを処理します。計算スレッドは、シミュレーションの次のステップを計算するループにあります。今...カーソルを使用してシミュレーションを操作したいと思います(オブジェクトのドラッグなど)。シーンでインテリジェントなレイ シューティングと空間空間の分解を行わないことにしたので (後でやらなければならないかもしれません)、コンピューティング スレッドに次のような処理を実行させたいと思います。
glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
glGetIntegerv(GL_VIEWPORT, viewport);
gluProject(px, py, pz, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z);
[px;py;pz] ポイントのスクリーン [x;y] 座標を取得し、シミュレーションの次のステップの計算に使用します。さて、メイン スレッドは常に正しい modelviewMatrix および ProjectionMatrix 配列を取得しますが、これが計算スレッドによって実行されると、トラッシュ マトリックス データが取得されます。私は多くのことを試しました... OpenGLをクエリする前にmakeCurrent()を実行し、OpenGLアクションをロックして、マトリックスが変更されないようにしましたが、成功しませんでした。これも可能ですか?シーンの描画後、OpenGL は行列を保持しますか? このコードをスレッドセーフにする方法はありますか?