次のコードは、2 つのクワッドではなく 1 つのクワッドを使用し、それに応じてテクスチャ座標を調整します。すべてのテクスチャ処理コードを取り除いたことに注意してください。射影行列には のみが含まれますglOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
。Quad2D
を使用して tex 座標をアニメーション化できるクワッドを定義しますupdateTexCoords
。
static class Quad2D {
public Quad2D() {
/* SNIP create buffers */
float[] coords = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, };
mFVertexBuffer.put(coords);
float[] texs = { 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, };
mTexBuffer.put(texs);
/* SNIP reposition buffer indices */
}
public void updateTexCoords(float t) {
t = t % 1.0f;
mTexBuffer.put(0, 0.33f+t);
mTexBuffer.put(2, 0.0f+t);
mTexBuffer.put(4, 0.33f+t);
mTexBuffer.put(6, 0.0f+t);
}
public void draw(GL10 gl) {
glVertexPointer(2, GL_FLOAT, 0, mFVertexBuffer);
glTexCoordPointer(2, GL_FLOAT, 0, mTexBuffer);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
/* SNIP members */
}
今どのように呼び出すのupdateTexCoords
ですか?内onDrawFrame
に、次のコードを入れます。
long time = SystemClock.uptimeMillis() % 3000L;
float velocity = 1.0f / 3000.0f;
float offset = time * velocity;
mQuad.updateTexCoords(offset);
テクスチャ座標が を超える1.0f
ため、S 座標のテクスチャ ラップを に設定する必要がありますGL_REPEAT
。