web-dev-qa-db-ja.com

LIBGDX:「ビューポート」とは何ですか?

この投稿は、LIBGDXとBox2Dの間で適切にレンダリングする方法を学びたいという以前の投稿に関連しています。先に進む前に、ビューポートをよく理解する必要がありました。
多くのコード/投稿を読んだ後、「ビューポート」の意味は「LIBGDXのゲームの世界を表示するカメラのレンズの長方形の開口部であり、世界中を移動して必要なものを表示できる」と感じました。 "。しかし、もっと読んだ後、私は実際の意味にはほど遠いようでした。
LIBGDX wikiを読み、OpenGLドキュメントを読みました。これは、ビューポートが2つの異なるものであると説明しているようです。

LIBGDX Wiki:

「ビューポートは、3Dシーンが投影される画面の長方形の表示領域です。これは、3次元オブジェクトを2次元平面にマッピングすることに他なりません。」

OpenGL:

「ビューポートは、シーンがマップされる使用可能な画面領域の形状を示します。」

スタックオーバーフロー:

"...さまざまなコンテキストでいくつかの定義があります...": '(

私は何十ものフォーラムの投稿とチュートリアルを読んでみました。しかし、残念ながら、ほとんどの人は、「ビューポート」が誰もが理解し、知っているような原始的な概念であるかのように、すぐにそれに飛び込みます。
この非常に基本的な質問に対して、私は多くの熱を得るでしょう。炎上しないでください、私は実際には知らず、実際に助けが必要なので、私は尋ねています。

とにかく、実際の質問に。

LIBGDXコンテキストでの「ビューポート」とは何ですか?

25
coffeenet

これは、使用しているLibGDXのバージョンによって異なります。 LibGDX 1.0.0では、 Viewport クラスが導入されました。おそらく、最新のチュートリアルや記事が「ビューポート」について語るとき、それが意味することです。

このクラスは2つのことを管理します。

  • カメラのビューポート
  • OpenGLビューポート

カメラのビューポートは、ゲームの世界をどれだけ見たいかを定義します。サイズが10000pxX10000pxの巨大なTiledMapがある場合は、そのマップの小さな領域のみを一度に表示することをお勧めします。カメラのビューポートを800pxX 480pxに定義すると、マップの一部が正確にこの寸法になります(少なくともOrthographicCameraの場合)。これは、自分の世界を眺め、ビューポートを介してそのサイズを定義するウィンドウのようなものです。

OpenGLビューポートは、カメラのビューをマップする領域を定義します。デフォルトでは、そのビューポートはデスクトップオペレーティングシステムのウィンドウのサイズの100%です。しかし、それも異なる可能性があります。 LibGDX1.0.0のFitViewportは、そのビューポートをスケーリングして、定義した「仮想ビューポート」(実際にはViewportクラス)。つまり、ウィンドウのアスペクト比がViewport(仮想)アスペクト比と一致しない場合、OpenGLビューポートは小さいサイズに設定され、黒いバーが表示されます。つまり、デスクトップの実際のウィンドウとカメラの間の別のレイヤーのように考えることができます。このレイヤーは、カメラの出力を取得し、デスクトップウィンドウ内で定義されたサイズにスケーリングします。

28
noone