0

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);
}
4

2 に答える 2

4

テクスチャを作成するときに、エッジの処理に使用するモードを設定できます。次のように、モードを CLAMP_TO_EDGE (明らかにデフォルト) の代わりに REPEAT に設定します。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
于 2013-03-17T21:24:45.483 に答える
2

GL_TEXTURE_WRAP_S と GL_TEXTURE_WRAP_T を GL_REPEAT に設定するには、 glTexParameterを使用する必要があります。

それが役立つことを願っています。

于 2013-03-17T21:24:59.767 に答える