ゲームはトップダウンの2D宇宙船ゲームで、「小惑星」と考える。OpenGL(OpenTK)の宇宙船の方向に2Dカメラを回転させる
Box2Dxは物理エンジンで、追加のゲームオブジェクトを描画するために、OpenTKに基づいて付属のDebugDrawを拡張しました。カメラを常に移動させて、常にプレーヤーの船の中心に置き、ズームインとズームアウトを完璧に行います。しかし、私は実際に船と一緒に回転するカメラが必要なので、常に同じ方向に向いています。つまり、船は画面の中央で凍っているように見え、ゲーム世界の残りの部分は回転するにつれてその周りを回転します。
私はコードサンプルを適合させようとしましたが、何も動作しません。私が達成することができた最高のものは、斜めにカットされたレンダリングです。
// Clear.
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
// other rendering omitted (planets, ships, etc.)
this.OpenGlControl.Draw();
更新ビュー - 船とのセンターはその角度に一致するように回転させる必要があります。
は、ループをレンダリングします。今、私はちょうど概念実証、ないサイコロのための任意の角度でそれを回転させるようにしようとしているために:
public void RefreshView()
{
int width = this.OpenGlControl.Width;
int height = this.OpenGlControl.Height;
Gl.glViewport(0, 0, width, height);
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
float ratio = (float)width/(float)height;
Vec2 extents = new Vec2(ratio * 25.0f, 25.0f);
extents *= viewZoom;
// rotate the view
var shipAngle = 180.0f; // just a test angle for proof of concept
Gl.glRotatef(shipAngle, 0, 0, 0);
Vec2 lower = this.viewCenter - extents;
Vec2 upper = this.viewCenter + extents;
// L/R/B/T
Glu.gluOrtho2D(lower.X, upper.X, lower.Y, upper.Y);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
}
今、私は明らかに、この間違ったをやっています。 0度と180度は右寄りにしたり、反転させたりしますが、他の度合では実際にズームイン/ズームアウトするか黒で表示され、何もレンダリングされません。下記の例は以下のとおりです。船の角度は0.0fがある
度45のズームアウトしてもまったく回転しません。それは奇妙です。
90度のすべてが黒を返します。あなたがブラックを見たことがない場合:
助けてください!
https://www.opengl。org/sdk/docs/man2/xhtml/glRotate.xmlは、glRotatefの引数2-4があなたが回り込んでいるベクトルであることを示しているようです。 '0、0、0'を入れると、私の行動は未定義であると思われます。代わりに '0、0、1'を試しましたか? (深さがz軸であると仮定) – pingul
回転を投影行列スタックに適用しています。さらに、廃止された固定機能パイプラインをもう使用しないでください。それを使用する正当な理由がない場合は、Coreプロファイルに固執してください。 – BDL