2013-08-02 7 views
0

J'ai un typedef struct telles que les suivantes:Erreur: Envoi 'float [3]' au paramètre de type incompatible 'float'

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

Je veux itérer les données de position, couleur et 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' 
    } 
} 

les données transmises dans:

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

Comment puis-je itérer les données et ajouter à mon NSMutabl eArray sans avoir cette erreur?

Répondre

1

Si vous voulez itérer sur tous les éléments de v->Position pour un seul sommet, il devrait être

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

MISE À JOUR: Pour un tableau de sommets, votre méthode pourrait ressembler à ceci:

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

Si

Vertex Square_Vertices[] = { ... } 

est un ensemble de sommets, vous appelez la méthode

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

Quand je fais cela, je ne comprends pas toutes les données que je passe dans – user1585646

+0

@ user1585646:. Voulez-vous ajouter les positions d'un sommet ou d'un tableau de sommets? - Peut-être montrer comment la méthode est appelée. –

+0

Un tableau de sommets – user1585646

Questions connexes