我正在为OpenGL开发一个使用GLKit的iPhone项目,需要同时绘制几个不同的对象,并独立地旋转和转换它们。几乎我看到的每个GLKit示例都将顶点/颜色/纹理数据放置在呈现类中(通常是GLKViewController)。我需要做的是创建单独的类来保存对象数据,并简单地从GLKViewController类调用对象的绘制方法。类似于:
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
[mycube draw:view];
}
-(void)glkViewControllerUpdate:(GLKViewController *)controller{
[mycube updateposition:controller.timesincelastdraw];
}我应该如何实现这一点呢?如何从单独的类绘制到EAGLContext?有什么例子我可以看看吗?谢谢。
发布于 2014-04-10 20:10:35
应该绘制的每个对象都应该符合某个协议,该协议将为要显示的对象提供所有必要的信息。呈现代码将包含在呈现器类中。例如:
@protocol Renderable <NSObject>
// returns a vertex array
-(GLfloat*)mesh;
@optional
-(GLKBaseEffect*)effect;
@end
@interface GLRenderer : NSObject
@property(nonatomic, strong) EAGLContext* context;
-(void)draw:(id<Renderable>)renderable;
@end绘图将在呈现器类中完成。所以你只需打电话
[myRenderer draw:myCube];如果(出于某种原因),您希望调用多维数据集本身上的绘制方法,我建议您将呈现代码保存在呈现器中,并通过为每个对象创建一个基本可绘制对象来通过继承处理呈现。它将实现Renderable协议并实现所有所需的方法。
我建议您从实现基本绘图操作开始,并在需要时进行扩展。尝试将泛型代码放在Renderer中,将对象特定的代码放在对象中,但通过Renderable协议提供。
-(void)draw:(id<Renderable>)renderable{
if([renderable respondsToSelector:@selector(effect)]){
[[renderable effect] prepareToDraw];
}
GLFloat* data= [renderable mesh];
glBufferData(GL_ARRAY_BUFFER, sizeof(data),
data, GL_STATIC_DRAW);
// etc
}https://stackoverflow.com/questions/22746901
复制相似问题