2013-08-02 3 views
0

У меня есть ЬурейаЯ структура, такие, как:Ошибка: Посылка 'поплавок [3] для параметра несовместимого типа «поплавок»

typedef struct { 
    float Position[3]; 
    float Color[4]; 
    float TexCoord[2]; 
} Vertex; 

Я хочу перебирать данные для установки, цвет и TexCoord :

+ (void)arrayConverter: (Vertex *) v 
{ 

    // Turn typeDef struct into seperate arrays 
    NSMutableArray *position = [[NSMutableArray alloc] init]; 

    for (int p=0; p<(sizeof(v->Position)/sizeof(v)); p++) { 
     [position addObject:[NSNumber numberWithFloat:v[p].Position]]; // Error: Sending 'float[3]' to parameter of incompatible type 'float' 
    } 
} 

данных, который передается в:

Vertex Square_Vertices[] = { 
    // Front 
    {{0.5, -0.5, 1}, {0, 0, 0, 1}, {1, 0}}, 
    {{0.5, 0.5, 1}, {0, 0, 0, 1}, {1, 1}}, 
    {{-0.5, 0.5, 1}, {0, 0, 0, 1}, {0, 1}}, 
    {{-0.5, -0.5, 1}, {0, 0, 0, 1}, {0, 0}}, 
    // Back 
    {{0.5, 0.5, -1}, {0, 0, 0, 1}, {0, 1}}, 
    {{-0.5, -0.5, -1}, {0, 0, 0, 1}, {1, 0}}, 
    {{0.5, -0.5, -1}, {0, 0, 0, 1}, {0, 0}}, 
    {{-0.5, 0.5, -1}, {0, 0, 0, 1}, {1, 1}}, 
    // Left 
    {{-0.5, -0.5, 1}, {0, 0, 0, 1}, {1, 0}}, 
    {{-0.5, 0.5, 1}, {0, 0, 0, 1}, {1, 1}}, 
    {{-0.5, 0.5, -1}, {0, 0, 0, 1}, {0, 1}}, 
    {{-0.5, -0.5, -1}, {0, 0, 0, 1}, {0, 0}}, 
    // Right 
    {{0.5, -0.5, -1}, {0, 0, 0, 1}, {1, 0}}, 
    {{0.5, 0.5, -1}, {0, 0, 0, 1}, {1, 1}}, 
    {{0.5, 0.5, 1}, {0, 0, 0, 1}, {0, 1}}, 
    {{0.5, -0.5, 1}, {0, 0, 0, 1}, {0, 0}}, 
    // Top 
    {{0.5, 0.5, 1}, {0, 0, 0, 1}, {1, 0}}, 
    {{0.5, 0.5, -1}, {0, 0, 0, 1}, {1, 1}}, 
    {{-0.5, 0.5, -1}, {0, 0, 0, 1}, {0, 1}}, 
    {{-0.5, 0.5, 1}, {0, 0, 0, 1}, {0, 0}}, 
    // Bottom 
    {{0.5, -0.5, -1}, {0, 0, 0, 1}, {1, 0}}, 
    {{0.5, -0.5, 1}, {0, 0, 0, 1}, {1, 1}}, 
    {{-0.5, -0.5, 1}, {0, 0, 0, 1}, {0, 1}}, 
    {{-0.5, -0.5, -1}, {0, 0, 0, 1}, {0, 0}} 
}; 

Как я могу перебирать данных и добавить к моему NSMutabl eArray без получения этой ошибки?

ответ

1

Если вы хотите перебрать все элементы v->Position для одной вершины, она должна быть

for (int p=0; p<(sizeof(v->Position)/sizeof(v->Position[0])); p++) { 
    [position addObject:[NSNumber numberWithFloat:v->Position[p]]]; 
} 

UPDATE: Для массива вершин, ваш метод может выглядеть следующим образом:

+ (void)arrayConverter: (Vertex *)vertices count:(NSUInteger)count 
{ 
    NSMutableArray *position = [[NSMutableArray alloc] init]; 
    Vertex *v = vertices; 
    for (NSUInteger i = 0; i < count; i++) { 
     for (int p=0; p<(sizeof(v->Position)/sizeof(v->Position[0])); p++) { 
      [position addObject:[NSNumber numberWithFloat:v->Position[p]]]; 
     } 
     v++; 
    } 
} 

Если

Vertex Square_Vertices[] = { ... } 

представляет собой массив вершин, вы могли бы назвать метод

[YourClass arrayConverter:Square_Vertices count:(sizeof(Square_Vertices)/sizeof(Square_Vertices[0]))]; 
+0

Когда я делаю это я не получаю все данные я передаю в – user1585646

+0

@ user1585646:. Вы хотите, чтобы добавить позиции одной вершины или массив вершин? - Возможно, покажите, как называется метод. –

+0

Массив вершин – user1585646

Смежные вопросы