使い方GL_REPEATにのみ繰り返されるわけではなく、選択の質感アトラス?(OpenGL)

StackOverflow https://stackoverflow.com/questions/662107

質問

どのように繰り返しの質感アトラス?

例えば、私のスプライト(選択)以内の質感座:

GLfloat textureCoords[]=
{
    .1f,  .1f,
    .3f,  .1f,
    .1f,  .3f,
    .3f,  .3f
};

していると繰り返スプライト N回 る三角形ストリップ(またはquad)で定義される:

GLfloat vertices[]=
{
   -100.f, -100.f,
    100.f, -100.f,
   -100.f,  100.f,
    100.f,  100.f
};

ただ、それを伴いつつ GL_REPEAT とtextureCoordsい渡された範囲の [0,1].こしかし、動作しない:(繰り返し見て、自分なりのN=10)

GLfloat textureCoords[]=
{
    10.1f,  10.1f,
    10.3f,  10.1f,
    10.1f,  10.3f,
    10.3f,  10.3f
};

いている当社の食感atlas繰り---

方法を教えてくださいこ右す。

役に立ちましたか?

解決

できないので、その記述の問題をもたらしていました。OpenGLの質感座標モードのみのお申込みの食感です。

通常、繰り返し質感んの多角形を描画するのは"大きい"よりご質感されることも示唆しています。例えば、まった角質感がたかったを繰り返し回数(六)大きな地域、すりつぶし矩形を描画するの倍ほどの広さです。そんセットの質感座標(0,0)-(6,1の質感の設定を"リピート".時補間、多角形、質感の調整を超えた1により、繰り返して、"ラップ"の食感が味するマーカス団は現在ワールドの矩形を塗りつぶします。

のテクスチャラップモードの種類の操作に記載のとおりの問題、すなわち彼らはすべて地図の[0,1]の範囲で、任意のサブセット.がんのシボ形状を利用での一部の質感がありうるかどうかを指定します大きな質感の調整がOpenGLを繰り返す内部のみの矩形を塗りつぶします。

基本的に二つの選択肢:のいずれかを感じみのスプライトから必要な既存の質感や書GLSL頂点プログラムの質感座標を適切に表す

他のヒント

私はあなたがそれを行うことができますかわかりません。私は、OpenGLのテクスチャはテクスチャ全体のためにのみを適用モードを調整すると思います。アトラスを使用する場合は、あなたのテクスチャが0と1、ラッピングとクランプが発生し、通常の限界に近づくことはありません座標ように、あなたは、「サブテクスチャ」を使用しています。

これに対処するための拡張機能があるかもしれません、私はチェックしていません。

EDIT:通常、テクスチャを繰り返すために、あなたはあなたのテクスチャが意味よりも「大きな」であるポリゴンを描画したいです。あなたはより大きな面積で、あなたがた回数を繰り返してみたかった正方形のテクスチャ(たとえば6)を持っていた場合たとえば、あなたは同じ幅、それは背が高いとして6回だ四角形を描画したいです。 「リピート」に(6,1)、およびテクスチャモード - 次に、(0,0)にテクスチャ座標を設定したいです。ポリゴン間で補間すると、テクスチャはテクスチャが長方形全体で6回をマップする原因と、テクスチャに「ラップアラウンド」、イネーブルされます。

繰り返すことにより、それが1人の意志を超えて座標

これは画像なしで説明するビット粗である。

あなたは、テクスチャの一部だけを使用してテクスチャしているときに

とにかく、大きなテクスチャはOpenGLは唯一のサブ矩形の内部にそれを繰り返す可能な方法で座標を指定する方法はありません。

テクスチャラップモードのいずれも、すなわち、彼らはすべてのフル[0,1]の範囲ではなく、いくつかの任意のサブセットにマップする、あなたが探している操作の種類をサポートしていません。あなたは基本的に2つの選択肢があります。適切に座標のどちらかは、既存のテクスチャから必要なだけスプライトを持つ新しいテクスチャを作成したり、テクスチャをマッピングするGLSLピクセルプログラムを書く

これは古い話題かもしれないが。ここで私はそれをやってしまった方法は次のとおりです。

この問題を回避するには、テクスチャUVのサブセットを含む一緒に接着され、複数のメッシュを作成するであろう。

例えば: [ - 0.1 0.05]およびV [0.05~0.1] IはUで、より大きなテクスチャアトラス内に含まれるレーザテクスチャを有します。

私はその後、それぞれがU [0.05~0.1]&Vを有する、[0.05~0.1]座標をNメッシュを構築することになります。 (N =長さ/ texture.height;高さは、私が繰り返したいテクスチャの大きさである、または容易に:。。私はテクスチャを繰り返したい回数の量を)

このソリューションは、テクスチャの後にテクスチャをリロードするよりもコスト効率になります。 (あなたが必要として)あなたはバッチすべてのコールをレンダリングする場合は特に。

(のOpenGL ES 1.0,1.1,2.0 - モバイルハードウェア日)

実行することはできません...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top