2010-12-08 46 views
1

Nous utilisons GLPaint exemple pour une nouvelle application. Nous souhaitons montrer à l'utilisateur comment dessiner peu d'objets. Nous avons vu apple GLPaint a un exemple sur la façon de lire des données de points à des dessins.CGPoints dessinés à l'envers dans GLPaint

Nous avons donc réussi à fournir à nos propres données et il fonctionne très bien à côté du problème qu'il fait à l'envers.

Lorsque les points sont fournis pour que -

alt text

il puisera que

alt text

Y at-il une solution simple pour cela?

Merci, Shani

+0

Juste à l'envers ou à l'envers et en arrière comme représenté? – genpfault

Répondre

2

Le système de coordonnées iPhone se lit de haut en bas, tandis que openGL utilise un système cartésien. Ainsi, tous les dessins en openGL apparaîtront à l'envers sur l'iPhone. Essayez de retourner votre image à l'envers lors du rendu.

0

merci Ginamin

qui a beaucoup aidé. il semble qu'ils devraient faire une sorte de construction en fonction pour retourner les coordonnées.

Je l'ai fait - 1. Trouver le point le plus haut et le plus bas dans les coordonnées y. 2. multipliez chaque point y par -1 et ajoutez-y les points les plus hauts et les plus bas. donc l'image est dessinée correctement.

Ceci est le code si cela peut aider n'importe qui.

//points array for example 
points = [[NSArray alloc] initWithObjects: 
       [NSValue valueWithCGPoint:CGPointMake(0, 0)], 
       [NSValue valueWithCGPoint:CGPointMake(0, 90)], 
       [NSValue valueWithCGPoint:CGPointMake(100, 90)], 
       [NSValue valueWithCGPoint:CGPointMake(100, 0)], 
       [NSValue valueWithCGPoint:CGPointMake(0, 0], 
       nil]; 


    CGPoint point; 
    NSValue *val; 
    NSDictionary * dict; 
    NSMutableArray *yPoints =[[NSMutableArray alloc] initWithCapacity:[points count]]; 

    for (int i=0; i<[points count]; ++i) { 
    val = [points objectAtIndex:i]; 
    point = [val CGPointValue]; 
    dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:point.y] forKey:@"y"]; 
    [yPoints addObject:dict]; 

    } 

      //sort the array by the y value 
    NSSortDescriptor * yDescriptor = 
    [[NSSortDescriptor alloc] initWithKey:@"y" 
    ascending:YES]; 

    NSArray * descriptors = 
    [NSArray arrayWithObjects:yDescriptor, nil]; 
    NSArray * sortedArray = 
    [yPoints sortedArrayUsingDescriptors:descriptors]; 

      //get the first and last points from the sorted array 

    yFactorHighest = [[[sortedArray lastObject] objectForKey:@"y"] intValue]; 
    yFactorlowst = [[[sortedArray objectAtIndex:0] objectForKey:@"y"] intValue]; 

    [yDescriptor release]; 
    [yPoints release]; 

et la fonction de dessin -

- (void) playback:(NSString*)letter 
{ 

    NSUInteger pointsCount = [points count]-1; 


    // Render the current path 


    val1 = [points objectAtIndex:p]; 
    point1 = [val1 CGPointValue]; 
    point1.y=-(p1.y)+yFactorHighest+yFactorlowst; 

    val2 = [points objectAtIndex:p+1]; 
    point2 = [val2 CGPointValue]; 
    point2.y=-(p2.y)+yFactorHighest+yFactorlowst; 

    [self renderLineFromPoint:point1 toPoint:point2]; 
    p++;  

    if(p<pointsCount) 
     [self performSelector:@selector(playback:) withObject:@"a" afterDelay:0.1]; 

} 

im nouveau à la programmation, donc je l'espère, il n'y a aucun problème dans mon code. espère que cela vous aidera

Shani