Как сохранить VBO в пользовательском объекте
Я хотел бы сохранить информацию о вершине, нормале и текстуре для моего Cat
объекты в каждом экземпляре в форме объекта буфера вершин, но я не знаю как. Я хочу что-то вроде этого:
@property(nonatomic, assign) int *indices; // vertex indices for glDrawElements
@property(nonatomic, assign) GLKVertexAttrib vertexBufferObject; // ideally
@property(assign) GLKVector2 position;
@property(assign) GLKVector2 velocity;
Если вы не можете создавать объекты, которые содержат определенные VBO, что вы делаете?
1 ответ
Я закончил тем, что сделал это:
@property(nonatomic, assign) int *indices;
@property(nonatomic, assign) GLuint vertexBuffer; // good
@property(assign) GLKVector2 position;
@property(assign) GLKVector2 velocity;
- (id)initWithVertices: (SceneVertex [])vertices size: (uint) size; // very good
- (void)render;
и тогда это:
- (id) initWithVertices:(SceneVertex [])vertices size:(uint)size
{
if (self = [super init])
{
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, size * sizeof(SceneVertex), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
int stride = sizeof(GLKVector3) * 2;
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, stride, BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, stride, BUFFER_OFFSET(sizeof(GLKVector3)));
}
return self;
}
И это сработало просто отлично. Теперь вся моя информация содержится в каждом объекте. Потрясающие!