为什么不是';这种纹理在iOS OpenGL ES 2.0中是否重复?

为什么不是';这种纹理在iOS OpenGL ES 2.0中是否重复?,ios,objective-c,xcode,opengl-es-2.0,glkit,Ios,Objective C,Xcode,Opengl Es 2.0,Glkit,我有一个类可以在iOS中在屏幕上渲染纹理2D形状。如果使用小于1.0的纹理坐标,纹理将适当缩放以匹配坐标。但是,如果使用大于1.0的纹理坐标,纹理将正确缩放,但不会像我预期的那样重复自身。相反,它只绘制一次纹理,并在形状的其余部分重复边缘像素(我希望这有意义:/) 有没有办法在OpenGL ES 2.0中使用GLKit启用重复纹理 渲染功能是: -(void)render { // If we have a texture set, setup the Texture Environme

我有一个类可以在iOS中在屏幕上渲染纹理2D形状。如果使用小于1.0的纹理坐标,纹理将适当缩放以匹配坐标。但是,如果使用大于1.0的纹理坐标,纹理将正确缩放,但不会像我预期的那样重复自身。相反,它只绘制一次纹理,并在形状的其余部分重复边缘像素(我希望这有意义:/)

有没有办法在OpenGL ES 2.0中使用GLKit启用重复纹理

渲染功能是:

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

创建纹理时,可以设置用于处理边的模式。将模式设置为“重复”,而不是将_夹紧到_边(这显然是默认设置),如下所示:

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

创建纹理时,可以设置用于处理边的模式。将模式设置为“重复”,而不是将_夹紧到_边(这显然是默认设置),如下所示:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
您需要使用将“GL_纹理包裹”和“GL_纹理包裹”设置为“GL_重复”

希望对您有所帮助。

您需要使用来设置GL\u TEXTURE\u WRAP\S和GL\u TEXTURE\u WRAP\T为GL\u REPEAT


希望这能有所帮助。

不幸的是,我不能认为你们两人都是正确的(因为你们提出了同样的建议),但谢谢!不重要——很高兴我们回答了你的问题。谢谢你的支持:)不幸的是,我不能认为你们两个都是正确的(因为你提出了同样的建议),但是谢谢!不重要——很高兴我们回答了你的问题。谢谢你的投票:)