CGPoints нарисованы с ног на голову в GLPaint - PullRequest
1 голос
/ 08 декабря 2010

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

Итак, нам удалось предоставить наши собственные данные, и они прекрасно работают, помимо проблемы, которая делает их перевернутыми.

Когда предоставленные баллы предназначены для этого -

alt text

это нарисует, что

alt text

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

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

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

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

0 голосов
/ 09 декабря 2010

спасибо, Джинамин

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

я сделал это - 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];

}

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

Шани

...