2010-12-08 2 views
1

Мы используем пример GLPaint для нового приложения. Мы хотим продемонстрировать пользователю способ рисовать несколько объектов. Мы видели яблоко GLPaint имеет пример того, как воспроизводить данные точек на чертежах.CGPoints перевернуты вверх ногами в GLPaint

Таким образом, нам удалось предоставить наши собственные данные, и он отлично работает рядом с проблемой, из-за которой он перевернулся.

Когда точки поставлянными для этого -

alt text

будет рисовать что

alt text

Есть простое решение для этого?

Спасибо, Шани

+0

Просто с ног на голову, или с ног на голову и обратно, как изображено? – genpfault 2010-12-08 20:13:09

ответ

2

iPhone системы координат считывает до вниз, в то время как OpenGL использует декартово систему. Итак, все рисунки в openGL будут отображаться вверх ногами на iPhone. Попробуйте перевернуть изображение вверх ногами при рендеринге.

0

благодарит Ginamin

, что очень помогло. Кажется, что они должны сделать какую-то функцию сборки, чтобы перевернуть координаты.

Я сделал это - 1. найдите самую высокую и самую низкую точку в координатах y. 2. умножьте каждую y-точку на -1 и добавьте к ней наивысшие + самые низкие точки. поэтому изображение рисуется правильно.

это код, если он поможет кому угодно.

//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]; 

и функция рисования -

- (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]; 

} 

им новое для программирования, так что я надеюсь, что нет никаких проблем в моем коде. надеюсь, что это поможет

Шани