【问题标题】:How to load different textures for each mesh in OpenGL ES 2.0?如何在 OpenGL ES 2.0 中为每个网格加载不同的纹理?
【发布时间】:2012-12-15 22:57:10
【问题描述】:

我是 OpenGL ES 的新手,我正在尝试做一些基本的东西作为我学习曲线的一部分。我能够使用两个 glDrawArrays 调用来渲染两个网格,一个球体和一个立方体。我正在尝试加载不同的纹理以包裹立方体和球体,但发生的情况是最后加载的纹理被包裹到两个网格。有谁知道为什么会发生这种情况?

这是网格的代码:

glEnable(GL_DEPTH_TEST);

glGenVertexArraysOES(1, &vertexArray);
glBindVertexArrayOES(vertexArray);

glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeMeshVerts, meshVerts, GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(0));

glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(4*3));

glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 4*8, BUFFER_OFFSET(4*6));

// Texture
// Create image from file
NSString *path = [[NSBundle mainBundle] pathForResource:textureImage ofType:@"jpg"];
NSData *texData = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:texData];

// 生成一个新的 OpenGL ES 纹理缓冲区和 // 使用来自的像素数据初始化缓冲区内容 // 指定的 Core Graphics 图像,cgImage。

[TextureLoader textureWithCGImage:image.CGImage options:nil error:NULL];

glBindVertexArrayOES(0);

这是抽奖代码:

glBindVertexArrayOES(_vertexArray);

// Render the object with ES2
glUseProgram(_program);

// Set the sampler texture unit to 0
glUniform1i (uniforms[UNIFORM_TEXTURE_MATRIX], 0);

glDrawArrays(GL_TRIANGLES, 0, numVertices);

【问题讨论】:

    标签: iphone ios opengl-es-2.0


    【解决方案1】:

    您没有在渲染之前将纹理绑定到采样器。首先您需要保留对textureWithCGImage: 返回的GLKTextureInfo 对象的引用,然后您可以使用带有纹理名称的glBindTexture 将其绑定到当前采样器。例如

    GLKTextureInfo *tex = [TextureLoader textureWithCGImage:image.CGImage options:nil error:NULL];
    ...
    glBindTexture(GL_TEXTURE_2D, tex.name);
    

    您需要在每次绘制调用之前为采样器设置正确的纹理。您可以将所需的每个纹理绑定到不同的采样器,然后也只需传入正确的采样器制服。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多