1

3x9の繰り返しセクションのあるテクスチャがあります。テクスチャ用に持っているテッセレートされた1920x1080の画像を保存したくないので、他の解像度で正しく適用できるように、コードで生成したいと思います。これをどのように行うことができるかについてのアイデアはありますか?元のテクスチャはここにあります:http://img684.imageshack.us/img684/6282/matte1.png

テクスチャが2の累乗ではないことを知っているので、シェーダー内で繰り返しを行う必要があります。これは次のように行います。

    uniform sampler2D tex;
    varying vec2 texCoord;

    void main() {
      gl_FragColor = texture2D(tex, mod(texCoord, vec2(3.0, 9.0)) * vec2(0.75, 0.5625));
    }

これが私がクワッドを描く方法です:

      glBegin(GL_QUADS)

      glColor4f(1.0, 1.0, 1.0, 1.0)
      glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.topLeft().x(), self.widgetPhysicalRect.topLeft().y())
      glVertex2f(-1.0, 1.0)
      glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.topRight().x(), self.widgetPhysicalRect.topRight().y())
      glVertex2f(1.0, 1.0)
      glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.bottomRight().x(), self.widgetPhysicalRect.bottomRight().y())
      glVertex2f(1.0, -1.0)
      glMultiTexCoord2f(GL_TEXTURE1, self.widgetPhysicalRect.bottomLeft().x(), self.widgetPhysicalRect.bottomLeft().y())
      glVertex2f(-1.0, -1.0)

      glEnd()

任意のアイデアをいただければ幸いです。

ありがとう!

4

1 に答える 1

4

固定パイプで行うのとほぼ同じです。サンプラーを均一に設定する前に、バインドされたテクスチャのラップモードを繰り返すように設定すると、0-1の範囲外のテクスチャ座標がテクスチャを繰り返します。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

あなたの場合、テクスチャ座標はs=0-640およびt=0-120になります。フラグメントシェーダーには特別なものは必要ありません。通常のシェーダーで十分texture2D(tex, texCoord)です。

于 2010-07-03T02:23:51.273 に答える