gpt4 book ai didi

ios - GLK View Controller : Setting up independent objects using GLKit

转载 作者:行者123 更新时间:2023-12-02 05:54:12 25 4
gpt4 key购买 nike

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

-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
[mycube draw:view];
}

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

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

最佳答案

应该绘制的每个对象都应该符合特定的协议(protocol),该协议(protocol)将提供显示对象的所有必要信息。渲染代码将包含在渲染器类中。例如:

@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 协议(protocol)并实现所有必需的方法。

我建议您从实现基本绘图操作开始,然后根据需要进行扩展。尝试将通用代码放入渲染器中,将特定于对象的代码放入对象中,但通过可渲染协议(protocol)提供。

-(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
}

关于ios - GLK View Controller : Setting up independent objects using GLKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22746901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com