我正在开发一个游戏,在这个游戏中我必须摇动骰子来获取数字。我正在使用glkit来制作一个立方体,并通过GLKBaseEffect对该立方体进行纹理化。好 !我想要一个立方体在每个面上都有不同纹理的图像,以便它可以模拟一个骰子。我想要立方体的每个面孔显示不同的骰子图像像一个脸部显示数字1另一个脸部显示数字2等等。 我在这里粘贴我的代码。如何在glkit中的立方体的每个面上获得具有不同纹理图像的立方体?
- (void)setupGL {
[EAGLContext setCurrentContext:self.context];
glEnable(GL_CULL_FACE);
self.effect = [[GLKBaseEffect alloc] init];
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
GLKTextureLoaderOriginBottomLeft,
nil];
NSError * error;
NSString *path = [[NSBundle mainBundle] pathForResource:@"tile_floor" ofType:@"png"];
GLKTextureInfo * info = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error];
if (info == nil) {
NSLog(@"Error loading file: %@", [error localizedDescription]);
}
self.effect.texture2d0.name = info.name;
self.effect.texture2d0.enabled = true;
// draw one texture per side
// New lines
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
// Old stuff
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);
// New lines (were previously in draw)
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Color));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, TexCoord));
// New line
glBindVertexArrayOES(0);
}
,并呼吁从这里汲取元素法drawInRects
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
[self.effect prepareToDraw];
glBindVertexArrayOES(_vertexArray);
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
}
谁能帮我实现这一目标。 在此先感谢。 。 。 。
你解决了这个问题吗?如果你已经解决了,你能解释我是怎么做到的?你可以将它作为答案发布! – 2vision2 2013-03-13 15:47:17
好吧!我没有得到任何解决方案来实现这个使用GLKit,但直接使用openGL命令得到了一个解决方案。你只需要加载六个不同的纹理,并将其渲染在同一个帧缓冲区中。我使用核心图形来创建这六个纹理的位图并发送打开GL Land进行渲染。我很快就会实现与GLKit一样的功能,并且会在这里发布。 @Nicol Bolas – 2013-03-15 05:17:12