【问题标题】:Texture no longer renders after UV changeUV 更改后不再渲染纹理
【发布时间】:2011-11-08 19:50:41
【问题描述】:

我打算写一个纹理图集管理器,但是我遇到了一个问题。当我修改我原来的 UV 坐标时,我的程序不再渲染任何东西??这是我的抽奖代码:

- (void)drawFrame {
[(EAGLView *)self.view setFramebuffer];

//GLfloat aspectRatio = self.view.bounds.size.height/self.view.bounds.size.width; 
float m[16] = {2/self.view.bounds.size.width, 0, 0, 0, 0, 2/self.view.bounds.size.height, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 };

CGSize imageSize = CGSizeMake(512, 512);
CGRect drawBounds = CGRectMake(0, 0, 106, 126);

GLfloat x = (1/imageSize.width) * drawBounds.size.width;
GLfloat y = (1/imageSize.height) * drawBounds.size.height;

static const GLfloat vertices[] = {
    -53.0f, -63.0f,
    53.0f, -63.0f,
    -53.0f,  63.0f,
    53.0f,  63.0f,
};

GLfloat texCoords[] = {
    0.0, 0.0,
    x, 0.0,
    0.0, y,
    x, y
};

glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(program);

[[TextureLibrary sharedTextureLibrary] bindTexture:@"bounce" toSlot:GL_TEXTURE0];

glUniform1f(uniforms[UNIFORM_TEXTURE], 0);
glUniformMatrix4fv(UNIFORM_MVP_MATRIX, 1, GL_FALSE, m);

glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTURE_POSITION, 2, GL_FLOAT, 0, 0, texCoords);
glEnableVertexAttribArray(ATTRIB_TEXTURE_POSITION);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


[(EAGLView *)self.view presentFramebuffer];
}

但是,它可以像这样正常工作:

GLfloat texCoords[] = {
    0.0, 0.0,
    1.0, 0.0,
    0.0, 1.0,
    1.0, 1.0
};

帮助?

【问题讨论】:

    标签: ios opengl-es textures uv-mapping


    【解决方案1】:

    只是一个猜测,但 OpenGL 认为 (0, 0) 是图像的左下角。是否有可能您的图形位于左上角,因此您显示的区域实际上来自纹理的透明部分?

    如果是这样,那么您可以调整纹理坐标或调整纹理矩阵堆栈,使 (0, 0) 位于左上角。

    【讨论】:

    • 抱歉,我完全是 OpenGL 的新手。我如何在 ES 2.0 中做到这一点?
    • 最简单的解决方案是将所有“t”坐标(纹理空间中的 y 坐标)从 t 转换为 1.0 - t。因此,您将在代码中存储1.01.0 - y 而不是0.0y。或者在您的顶点着色器中进行转换。旧的固定功能将矩阵变换应用于纹理坐标,这对于减少数据大小等目的也很有用(例如,将坐标存储为字节,因此您可以将这些 0 到 255 输入缩放到您感兴趣的范围),但显然你可以做任何你认为合适的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2014-08-09
    • 2018-09-16
    相关资源
    最近更新 更多