【发布时间】: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