Pygletにおけるスケール解決

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

2
「ほとんどのゲームで解像度設定のラインに沿って考えている」ゲームの解像度設定によって、モニターに表示される解像度が変更されます。フルスクリーンゲームでは、デスクトップの解像度が変更されます。
追加された 著者 Nicol Bolas,

2 答え

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

from pgylet.gl import *

次に、あなたのゲームのウィンドウが初期化された後、次のコードを投げる:

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

この時点で解像度は倍になりますが、ウィンドウは同じサイズのままです。ウィンドウの幅と高さを倍にすることで、これを簡単に修正できます。さらに、テクスチャがぼやけて見えるので、修正する必要があります。 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倍のピクセルが表示されるはずです。

4
追加された

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

いいえ、画面の解像度が変更され、ウィンドウが表示されるため、 はサイズを変更します。

しかし、あなたはそれを完全に可能にするつもりです:最初にあなたのイメージを望みのより小さいサイズのFBOにレンダリングしてから、そのFBOの内容をレンダリングして全ウインドウをカバーします。 3Dエンジンでは、深度フィールド、カラーグレーディング、合成エフェクトなど、後処理のいくつかの形式を使用する場合、これは事実上無料です。

1
追加された