2

pyglet (OpenGL) ライブラリを使用していますが、ウィンドウのサイズを変更せずに仮想解像度を変更できるようにしたいと考えています。たとえば、2x2 ボックスは画面上で 4x4 ピクセルとして描画されます。描画されているものをすべて見つけて個別にスケーリングできることはわかっていますが、これにはおそらくコストがかかります。このオンラインの解決策を見つけることができなかったので(存在する場合でも)、助けていただければ幸いです。明確化: ほとんどのゲームの解像度設定に沿って考えています。ウィンドウは同じサイズで全画面表示のままですが、スケールが変更されます。

4

2 に答える 2

4

スケーリング機能にアクセスするには、openGL をインポートする必要があります。

from pgylet.gl import *

次に、ゲームのウィンドウが初期化された後に次のコードを挿入します。

#These arguments are x, y and z respectively. This scales your window.
glScalef(2.0, 2.0, 2.0)

この時点で、解像度は 2 倍になりますが、ウィンドウは同じサイズのままです。これは、ウィンドウの幅と高さを 2 倍にすることで簡単に修正できます。さらに、テクスチャがぼやけて見えるので、修正する必要があります。on_draw() 関数でテクスチャのパラメータを設定する必要があります。

def on_draw(self):
        self.clear() #clears the screen
        #The following two lines will change how textures are scaled.
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) 
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        self.label.draw() #blits the label to the screen

ピクセルが元のサイズの 2 倍で表示されるはずです。

于 2012-06-25T04:16:34.230 に答える
2

明確化: ほとんどのゲームの解像度設定に沿って考えています。ウィンドウは同じサイズで全画面表示のままですが、スケールが変更されます。

いいえ、画面の解像度が変更され、ウィンドウが追従するため、ウィンドウのサイズは変更されます

ただし、完全に可能にするつもりです。最初に画像を目的の小さいサイズの FBO にレンダリングし、次にその FBO のコンテンツをウィンドウ全体にレンダリングします。3D エンジンがなんらかの後処理 (被写界深度、カラー グレーディング、合成効果など) を使用する場合、これは事実上無料で提供されます。

于 2011-12-19T09:39:35.777 に答える