0

GLUT と Visual Studio 2010 をインストールし、OpenGL の基本 (www.opengl-tutorial.org) と 2D グラフィックス プログラミングに関するチュートリアルをいくつか見つけました。私はCの高度な知識を持っていますが、グラフィックプログラミングの経験はありません...

プロジェクト(天文学 - 時間スケール)の場合、ウィンドウの中心に1つのオブジェクトを作成し、他の5つのオブジェクト(円、点...)を作成して、いくつかの方程式に関して中心のオブジェクトを中心に回転させる必要があります(それらを実装して解決できます)。方程式は、その 5 つのオブジェクトの座標を計算するためのもので、すべての方程式にはパラメーター t (時間として) があります。アニメーションを作成するために、パラメーター t を 0 から 2pi まで変化させ、さまざまな瞬間の座標を取得します。タスクがオブジェクトの新しい座標を印刷することであれば、私には簡単ですが、問題はグラフィックスのアニメーションを作成する方法です。回転/平行移動に OpenGL の一部の機能を使用できますか? 方程式によって決定された座標を使用して、オブジェクトを目的の場所に移動する方法は?または、ミリ秒ごとに新しい座標でオブジェクトを再描画できますか? 最初に考えたのは、すべてのオブジェクトを描画し、新しい座標を計算し、画面をクリアして、すべてのオブジェクトを新しい座標で描画し、それを無限に繰り返すことでした..(原始的ですが動作しますか?)

そのオブジェクトのスクリーン ショットを次に示します - http://i.snag.gy/ht7tG.jpg。私の質問は、各ステップでオブジェクトの新しい座標を計算し、それらを新しい場所に移動してアニメーションを作成する方法です。OpenGL の基礎と、C とジオメトリの十分な知識でそれを行うことはできますか? 何から始めればいいですか?ありがとう

4

3 に答える 3

0

または、ミリ秒ごとに新しい座標でオブジェクトを再描画できますか? 最初に考えたのは、すべてのオブジェクトを描画し、新しい座標を計算し、画面をクリアして、すべてのオブジェクトを新しい座標で描画し、それを無限に繰り返すことでした..

これは確かに行く方法です。さらに、OpenGL 3/4 の方法のように、シェーダーと頂点バッファーを気にしないことをお勧めします。最も簡単なのは「即時モード」と呼ばれるもので、OpenGL 3/4 で廃止されましたが、1/2/3 で利用可能です。それは簡単です:

glPushMatrix(); //save modelview matrix
  glTranslatef(obj->x, obj->y, obj->z); //move origin to object center
  glBegin(GL_TRIANGLES); //start drawing triangles
    glColor3f(1.0f, 0.0f, 0.0f); //a nice red one
    glVertex3f(0.0, +0.6f, 0.0f);
    glVertex3f(-0.4f, 0.0f, 0.0f);
    glVertex3f(+0.4f, 0.0f, 0.0f); //almost equilateral
  glEnd();
glPopMatrix(); //restore modelview matrix/origin

ヘルパー ライブラリglu(カメラ/プロジェクション マトリックスの設定に役立ちます) とglut(ウィンドウと基本的なコントロールと描画の設定が非常に簡単になるはずです) を調べてください。

使い方を理解するよりも、設定する (回転する三角形を表示する) 方が時間がかかるでしょう。実際に、開始に役立つコードを次に示します。最初の課題は、2D 関数 ( ) を使用できるように、Z 軸に沿って射影する 2D 直交射影行列を設定することですglVertex2

于 2013-01-23T01:45:14.050 に答える
0

最初に考えたのは、すべてのオブジェクトを描画し、新しい座標を計算し、画面をクリアして、すべてのオブジェクトを新しい座標で描画し、それを無限に繰り返すことでした..(原始的ですが動作しますか?)

それがまさにその仕組みです。GLUT を使用すると、GLUT が新しいフレームを描画するときだと判断したときに呼び出される表示関数を設定できます。この関数では、画面をクリアし、オブジェクトを描画して画面にフラッシュします。次に、GLUT に別のフレームを描画するように指示するだけで、アニメーション化されます!

スムーズにアニメートできるように、フレーム間の時間を追跡したいかもしれませんが、その部分を理解できると確信しています.

OpenGL は単なる描画ライブラリです。アニメーションは行いません。実装するのはあなた次第です。ただし、クリア/ドロー/フラッシュは、一般的に使用されるアプローチです。

注:「フラッシュ」とはglFlush()、マルチバッファモードのGLUTが必要ですが、glutSwapBuffers()

于 2013-01-23T00:47:40.400 に答える
0

赤い本は、最初に変換、回転、スケーリングなどを行うことができるモデルを描画する適切な方法を説明しています: http://www.glprogramming.com/red/chapter03.html

基本的には、ID をロードし、変換/回転/スケールを実行し (どれを最初に使用するかが重要です。この本では説明されています)、モデルを通常のスケールで原点にあるかのように描画し、新しいモデルに配置します。位置。次に、ID をロードして、次の ID に進むことができます。アニメーションのすべてのフレームで glClear() を実行し、すべてを再計算/再描画します。(コストがかかるように思えますが、通常、ドロー間でキャッシュできるものはあまりありません)。

于 2013-01-23T00:49:10.660 に答える