5

私はLibGDXフレームワークを使用してペイントアプリケーションに取り組んでおり、FrameBufferクラスを使用して、ユーザーが描画したものをソリッドテクスチャにマージしています。これは、ユーザーが描画として表示するものです。その点は問題なく機能していますが、ユーザーが描画できる領域が常に同じサイズになるとは限らず、ウィンドウ全体の解像度以外の解像度で正しく表示するのに問題があります。

私はこれを非常に広範囲にテストしましたが、FrameBufferがウィンドウ自体と同じ解像度でテクスチャを作成し、実際の領域に合わせてテクスチャを拡大または縮小しているようです。ウィンドウよりも大きいまたは小さい描画には非常に不快な効果があります。

私は、プロセスのすべてのステップで、このようなストレッチを自分で行ったことがないこと、そしてすべてが適切な寸法と場所で、必要な方法と場所で描画されていることを確認しました。また、FrameBufferクラス自体を調べて答えを見つけようとしましたが、奇妙なことにそこにも何も見つかりませんでした。しかし、私が行ったすべてのテストを考えると、この問題が発生する可能性がある唯一の場所のようです。なんとかして作成しました。

この問題のトラブルシューティングにかなりの時間を費やしてきたので、私は単に完全にアイデアがありません。

4

2 に答える 2

7

コアの問題を見つけてくれてありがとうSynthetik。これは、あなたが避けているこの状況を修正するための適切な方法です。(おもう!)

実際のデバイスウィンドウサイズに関係なく、フレームバッファに正しい比率とスケールテクスチャを生成させる方法は、次のように投影行列を必要なサイズに設定することです。

SpriteBatch batch = new SpriteBatch();
Matrix4 matrix = new Matrix4();
matrix.setToOrtho2D(0, 0, 480,800); // here is the actual size you want
batch.setProjectionMatrix(matrix);
于 2013-01-16T00:19:53.180 に答える
3

私は自分の問題を解決したと信じており、問題が何であるかについて非常に簡単に概説します。

基本的に、この問題の原因はSpriteBatchクラスにあります。具体的には、古いバージョンのクラスを使用していないと仮定すると、問題は、射影行列が設定されている行181にあります。この線 :

        projectionMatrix.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

これにより、描画されるすべてのものが、基本的にウィンドウ/画面の縮尺で描画され、その後必要な場所に収まるように引き伸ばされます。これを処理するためのより「適切な」方法があるかどうかはわかりませんが、SpriteBatchクラス内に別のメソッドを作成して、自分のディメンションでこのメソッドを再度呼び出し、必要に応じて呼び出すことができます。すべての描画などで必要なわけではなく、一度だけ、または寸法が変更される可能性がある場合はいつでも必要であることに注意してください。

于 2013-01-02T04:43:21.490 に答える