iOS の画面にテクスチャ付きの 2D シェイプをレンダリングするクラスがあります。1.0 未満のテクスチャ座標を使用すると、テクスチャは座標に合わせて適切にスケーリングされます。ただし、1.0 を超えるテクスチャ座標を使用すると、テクスチャは正しくスケーリングされますが、期待どおりに繰り返されません。代わりに、テクスチャを 1 回描画し、残りの形状全体でエッジ ピクセルを繰り返すだけです (意味があることを願っています :/ )。
GLKit を使用して OpenGL ES 2.0 で Repeating Textures を有効にする方法はありますか?
レンダリング関数は次のとおりです。
-(void)render
{
// If we have a texture set, setup the Texture Environment Mode
if (texture != nil) {
self.effect.texture2d0.envMode = GLKTextureEnvModeReplace;
self.effect.texture2d0.target = GLKTextureTarget2D;
self.effect.texture2d0.name = texture.name;
}
// Perform any Transformations on the Sprite
GLKMatrix4 modelViewMatrix = GLKMatrix4Multiply(
GLKMatrix4MakeTranslation(self.position.x, self.position.y, 0.0f),
GLKMatrix4MakeRotation(GLKMathDegreesToRadians(self.rotation), 0, 0, 1)
);
self.effect.transform.modelviewMatrix = modelViewMatrix;
// Prepare to Draw
[self.effect prepareToDraw];
// Setup the Vertices
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, self.vertices);
// Setup the Texture Coordinates
if (texture != nil) {
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, self.texCoords);
}
// Enable Alpha Blending for Transparent PNGs
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
// Draw the Triangle Strip from the Vertex Array
glDrawArrays(GL_TRIANGLE_STRIP, 0, self.numVertices);
// Disable Alpha Blending
glDisable(GL_BLEND);
// Disable Texture Environment
if (texture != nil) {
glDisableVertexAttribArray(GLKVertexAttribTexCoord0);
}
glDisableVertexAttribArray(GLKVertexAttribPosition);
}