1

OpenGl を使用して 2D プラットフォーム ゲームを作成し、C++ を大量に使用しようとしています。左右の矢印キーでプレーヤーを動かしたり、スペースでジャンプしたりできます。すべてのプラットフォームをテキスト ファイルを介してゲームにロードし、画面に出力しました。これはすべて本当にうまくいきます。私が抱えている問題はカメラにあります。右矢印キーを押すと、プレイヤーの x 位置が増加します。問題は、これが発生すると、実際のカメラも動かせないことです。これにより、プレーヤーを移動する代わりに、glTranslatef を使用してすべてのプラットフォームを左に移動する必要があると思います。これは私には少し奇妙に思えますが、これがどのように行われるべきか疑問に思っています。最後の質問は、シーン全体を翻訳するか、プレーヤーを移動するかということです。

4

3 に答える 3

2

glTranslateプレイヤーと反対方向にカメラを動かして、プレイヤーを追尾します。

カメラは、プレイヤーやその他の可動アイテムに似たゲーム内オブジェクトのようなものであり、レベルは固定位置の静的オブジェクトと考える必要があります。これにより、ゲーム内アイテムやその他のものを簡単に配置できます。

于 2012-07-02T21:54:15.627 に答える
2

実際に OpenGL で「カメラを移動」すると、実際にはカメラがないため、内部で行われることはまさにそれであり、シーン上のすべてを反対方向に移動します。

解決策として、glutを使用している場合は、使用できます

gluLookAt(x,  y,  z,
          ex, ey, ez,
          0,  1,  0)

ここで、(x, y, z) はカメラを配置する座標です。(ex, ey, ez) は、カメラが ((x, y, z) 座標を参照して) 調べたい方向ベクトルです。 ) および (0, 1, 0) はアップ ベクトルです。この関数は、必要なすべてのマトリックス変換を行います。詳細はこちら

glutを使用せず、生のOpenGLのみを使用している場合、同じリンクで、gluLookAtとまったく同じ効果を得るために使用する必要がある同等のopengl呼び出しについても説明されています

したがって、カメラを動かしたい場合 (プラットフォーム ゲームなのでおそらく左右のみ)、x 値を変更するだけで済みます。

于 2012-07-02T22:03:26.493 に答える
0

私は以下を使用してこれを機能させました..

gl.PushMatrix()
gl.Translatef((1280/2)-float32((player.Body.Position().X)), 0, 0.0)

//Rest of drawing Code Code

gl.PopMatrix()

これは OpenGL + Chipmunk Physics を使用しています (GoLang ですが、これらは単なる c バインディングであるため適用する必要があります)。この場合の 1280 は画面幅です。

于 2015-05-28T07:25:49.367 に答える