17

WebGL を使用して、Flickr フォト ストリームの小さな 3D ギャラリーを作成したいと考えています。WebGL では、寸法が 2 のべき乗である正方形の画像のみをテクスチャとして使用できるようです。あらゆる比率と寸法の画像を表示できる必要があります。画像データを最も近い正方形の寸法である別の画像にコピーし、テクスチャ座標を使用して正しく表示するとわかります。問題は、私が間違っている場合は修正してください。私は JavaScript でその画像操作を行うことができず、WebGL が手に入る前に処理を行うために ASP.NET、Java などを実行するサーバーが必要になることです。その上で。

サーバーが仲介者の画像プロセッサとして機能する必要なく、WebGL と JavaScript で任意のサイズの画像を使用する方法はありますか?

4

5 に答える 5

17

I have no problem with npot textures (FF & chrome) provided that you execute:

texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR);
texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR);
texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);
texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);
于 2010-11-26T19:22:57.430 に答える
9

このページは状況をうまくまとめています (そして、多かれ少なかれ、ここで他の回答者がすでに言ったことをもう一度述べています)。基本的に、WebGL はミップマッピングやリピートを含む NPOT テクスチャをサポートしていません。これらのモードなしではうまくいかない場合は、テクスチャを 2D キャンバスでサイズ変更できます。また、このページには、キャンバスのサイズを変更するための便利なコードが含まれています。

更新: WebGL の次のバージョンである WebGL2 は、NPOT テクスチャをサポートします

于 2011-07-18T16:05:57.367 に答える
3

@EnabrenTane が提供する参照は非常に役立ちます。2 の累乗でないテクスチャのサポート

デスクトップ用の OpenGL 2.0 以降では非 2 乗 (NPOT) テクスチャが完全にサポートされていますが、OpenGL ES 2.0 と WebGL では限定的な NPOT サポートしかありません。制限は、OpenGL ES 2.0 仕様のセクション 3.8.2「Shader Execution」および 3.7.11「Mipmap Generation」で定義されており、以下に要約されています。

  • generateMipmap(target) は、現在 target にバインドされているテクスチャのレベル 0 イメージの幅または高さが NPOT の場合、INVALID_OPERATION エラーを生成します。
  • シェーダで NPOT テクスチャをサンプリングすると、次の場合に RGBA カラー (0, 0, 0, 1) が生成されます。
    • 縮小フィルターは、NEAREST または LINEAR 以外に設定されます。つまり、mipmap フィルターのいずれかを使用する場合です。
    • 繰り返しモードが CLAMP_TO_EDGE 以外に設定されています。NPOT テクスチャの繰り返しはサポートされていません。
于 2019-01-17T13:40:27.677 に答える
2

簡単な解決策は、2Dキャンバスを使用してサイズを変更し、それをテクスチャとして使用することです。

于 2010-12-19T16:29:50.023 に答える
2

低レベルの詳細を十分に理解していないため、質問に完全に答えることができませんが、次のことがわかりました。

この投稿は励みにはなりません:

Minefield のテクスチャ処理が更新され、[それ] が仕様により適合するようになりました。以前は非常に寛容で [...]、WebGL の観点からは実際には有効ではないテクスチャを使用できました。[...] というエラー メッセージが表示されます。 2D テクスチャ、ミップマップを必要としない縮小フィルター、幅または高さが 2 の累乗でなく、CLAMP_TO_EDGE とは異なるラップ モードを備えています。」</p>

これらの追加条件がアプリに適用されるかどうかはわかりません。OpenGL ES 仕様も参照してください。

このスレッドは、「NPOT」のサポートについてかなり詳しく説明しています。

OpenGL は、2 つの方法で NPOT テクスチャをサポートします。1 つ目は「Rectangle Textures」(RT) と呼ばれるもので、任意のサイズにすることができますが、繰り返したり、ミップ マップしたり、境界線を付けたりすることはできません。また、0-1 のテクスチャ座標を使用するのではなく、0-w、0-h を使用します。OpenGL は、RT と同様の制約を持つ真の NPOT テクスチャもサポートしますが、通常の 0-1 テクスチャ座標を使用します。

問題は、一部の古いハードウェア (「古い」と言うときは 2005 年以降のハードウェアを意味します) は、真の NPOT ではなく、RT のみをサポートすることです。GLSL では RT に別のサンプラー (sampler2DRect と sampler2D) を使用するため、RT をサポートしているだけでは NPOT をエミュレートすることはできません。

OpenGL ES は NPOT のみをサポートし、RT はサポートしません。

...

WebGL 実装は、texImage2D および texSubImage2D の呼び出し中に、NPOT テクスチャ データを次に高い 2 次元にスケールアップできます。これには、API の変更は含まれません。O3D は、エンド ユーザーが知らなくてもこの手法が機能することを証明するために、場合によってはこれを行います。WebGL API で長方形のテクスチャを公開するのは悪い考えだと思います。それらは間違いなく前進の道ではありません。

それで、そのFWIWを取ってください...

于 2010-10-04T20:32:26.823 に答える