首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLKViewController:使用GLKit设置独立对象

GLKViewController:使用GLKit设置独立对象
EN

Stack Overflow用户
提问于 2014-03-30 16:58:34
回答 1查看 409关注 0票数 3

我正在为OpenGL开发一个使用GLKit的iPhone项目,需要同时绘制几个不同的对象,并独立地旋转和转换它们。几乎我看到的每个GLKit示例都将顶点/颜色/纹理数据放置在呈现类中(通常是GLKViewController)。我需要做的是创建单独的类来保存对象数据,并简单地从GLKViewController类调用对象的绘制方法。类似于:

代码语言:javascript
复制
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
    [mycube draw:view];
}

-(void)glkViewControllerUpdate:(GLKViewController *)controller{
    [mycube updateposition:controller.timesincelastdraw];
}

我应该如何实现这一点呢?如何从单独的类绘制到EAGLContext?有什么例子我可以看看吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 20:10:35

应该绘制的每个对象都应该符合某个协议,该协议将为要显示的对象提供所有必要的信息。呈现代码将包含在呈现器类中。例如:

代码语言:javascript
复制
@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

绘图将在呈现器类中完成。所以你只需打电话

代码语言:javascript
复制
[myRenderer draw:myCube];

如果(出于某种原因),您希望调用多维数据集本身上的绘制方法,我建议您将呈现代码保存在呈现器中,并通过为每个对象创建一个基本可绘制对象来通过继承处理呈现。它将实现Renderable协议并实现所有所需的方法。

我建议您从实现基本绘图操作开始,并在需要时进行扩展。尝试将泛型代码放在Renderer中,将对象特定的代码放在对象中,但通过Renderable协议提供。

代码语言:javascript
复制
-(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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22746901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档