2011-08-03 11 views
0

OpenGLを学ぼうとしていて、それはちょっと難しいです。私はそれを使用して2D画像にいくつかの効果を作り出すことを試みています。基本的には、イメージ(1000ピクセル×1000ピクセル)を均等な大きさの四角形(10×10グリッド)のグリッドに分割し、個別に四角形を操作したいとします。画面から別の「落ちる」など)。私はいくつかの基本的なオンライン指示(http://blog.jayway.com/2010/12/30/opengl-es-tutorial-for-android-%E2%80%93-part-vi-textures/)をテクスチャを単純な正方形にマッピングする方法はありますが、テクスチャを複数の正方形のより複雑な配置にマッピングすることに問題があります。OpenGLを使って四角形のグリッドにテクスチャを適用する方法

1)2x2(およびより大きなサイズ)の四角形のグリッドがある場合、どのようにグリッド全体に単一のテクスチャ/イメージをマップできますか?つまり、OpenGLが期待するテクスチャ座標(そしてどのような順番で)がこの作業をするのでしょうか?より大きなポリゴン構造上の "UV"座標の順序を調べる方法を頭の中で包み込むことはできません。

2)グリッドの各四角形を最終的に変換、回転などするため、グリッドの各四角形を作成し、テクスチャ/ビットマップを個別に分割し、各画像を別々に各広場?もしそうなら、効率的にビットマップを分割する方法に関する推奨事項はありますか?

何かすべてのヘルプ、リンク、提案などを大歓迎いたします。私はOpenGL ES 2のサポートを想定したAndroidアプリでこれをやっていますが、OpenGLのディスカッションやコンセプトのほとんどはプラットフォームに依存しないと仮定しています。できるだけ多くの速度や最小サイズが必要なので、これを行うための大きなフレームワークやツールキットを含めることは望ましくありません。

答えて

1

より重要な回答#2から、本当に必要以上に多くのテクスチャスイッチを使用する必要はありません。彼らは非常識なパフォーマンスの損失です。

#1に戻ると、これは実際には非常に単純です。あなたのテクスチャは単位の正方形の座標(0,0)から(1,1)にあります。これはテクスチャ空間座標と呼ばれ、軸はそれぞれUとVと呼ばれます。したがって、それぞれは0と1の間にあり、全体の画像をカバーします。

オブジェクトを作成するときに、頂点ごとに(頂点バッファを介して、またはすぐに)、各頂点の2番目の座標セット、UVテクスチャ座標を送信できます。これを使用してイメージを部品にスライスアップします。

特定のアプリケーションを行う最も簡単な方法は、頂点の座標を画像の長さで割り、作成している小さな正方形の長さで掛けることです。これは明らかにあなたの四角形を回転させ始めると明らかに機能しませんが、多分それがプロセスをより良く視覚化するのに役立ちます。

これは完全にプラットフォームに依存しないことに注意してください.DirectXアプリケーションなどについても同じ理由を使用できます。

1

1)検索キーワードは「テクスチャアトラス」です。

いくつかのヒントがありますが、私はまだ学んでいるようにインターネット上でより良い説明を見つけることができます:(OpenGl 2.1とGLSL 1を使用します。あなたはこのような何かを、あなたのフラグメントシェーダで

uniform mat4 projectionMatrix; 
uniform mat4 viewMatrix; 
uniform mat4 modelMatrix; 

attribute vec3 position; 
attribute vec2 texcoord; 

varying vec2 vertTexCoord; 

void main() 
{ 
    vertTexCoord = texcoord; 
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.0f); 
} 

uniform sampler2D texture; 
varying vec2 vertTexCoord; 

void main() 
{ 
    gl_FragColor = texture2D(texture, vertTexCoord); 
} 

し、その後、例えば、あなたは2x2のグリッドをしたい場合は2ので、メーリングリストへ)
頂点シェーダは、このような何かを持っています四角形(4つの部分に分割されたテクスチャ)の場合、このような頂点があります。
square2

それはちょっとです:
は (UV = TEXCOORD、頂点=位置)
square1
このようになり隣正方形(正方形が1つの単位ワイドおよびトールであると仮定して)頂点座標は1以上0以下になりますが、テクスチャ座標は(常に0と1の間では)できません。

2)ビットマップを分割しません。テクスチャアトラス(複数の?)を使うのはすでにかなり速いので、私はビットレートを分割しません。

私は助けてくれることを願っています! (申し訳ありませんが、私は画像を直接埋め込むことができませんでしたので、私は担当者に教えてください、私は将来することができます!:)

関連する問題