2009-06-01 5 views
1

私はタイルマップエディタでopenglを使用しています。タイルマップをGL_LUMINANCE32F形式で格納し、次にそれをopenglコマンドで変更します。openglの中で無限のキャンバス

今、私はキャンバスのサイズの制限が、タイルマップを描画する人の負担であることを認識しています。どうすれば無限のキャンバスを実装できますか? (拡大や縮小のために明示的にトリガする必要なしに拡大・縮小するなど)

必要に応じてキャンバスを拡大または縮小するのは難しくありません。別のキャンバスを簡単に作成し、古いキャンバスのコンテンツを移動できます古いキャンバスを削除します。代わりに、私は何の手がかりを持っていない何が、私はそれが縮小することができます検出するキャンバスを得ることができるとどのくらい縮小することができますか?

私はキャンバスの端にあるゼロの行と列の数を検出する必要があります。

答えて

2

タイルから無限のキャンバスを作成します。

+0

[OK]を、どのように空のタイルを検出するのですか? – Cheery

+0

256x256タイルで1024x768の画像があるとします。それは4x3のタイルです。それらは、y次元の100ピクセルだけ画像を拡大します。 4x4タイルで1024x868の画像を取得しました。部分的に表示されたタイルを追跡します(これにより、タイルをさらに割り当てる前にユーザーは別の156ピクセルまで拡大できます)。ユーザーは拡大した内容のみを表示します。 –

0

あなたのようにキャンバスを縮小することは、アーティストには役に立たないでしょう。頻繁に彼らは働くエリアを広げて、働くエリアを持っています。また、ターゲットプログラムで作業するために必要なモデルの周りに空白領域があるスプライトシートもあります。

私の提案は、必要に応じて拡大することですが、アーティストが手動でサイズを微調整できるようにすることです。

+0

これはタイルセットの描画にも関係しますが、今はタイルマップに集中しています。そうでなければ、私はそう考えています。ユーザーが手動でテクスチャの一部をドロップダウンすることを望まない場合や、テクスチャを大量に与え、ユーザーがレイヤーを保存しているときにのみ切り取るようにすることを考慮してください。 – Cheery

1

次の方法で、X方向とY方向を別々に縮小する方法を見つけることです:キャンバスの半分の長方形の「余白」をレンダリングし、ARB_ occlusion_queryを使用してそれが空であれば出てください。空でない場合は、半分に分割して繰り返します(つまり、適切なサイズを見つけるためにバイナリ検索を行います)。これにはログ(N)ステップが必要です。ここでNはキャンバスのサイズ(幅または高さ)ですので、毎回やり直すとかなり速くなります。

+0

オクルージョンクエリとステンシルは面白いです。私はあなたのバイナリ検索方法を一度に試してみたいと思います。 – Cheery

関連する問題