在GLPaint中颠倒了CGPoints

时间:2010-12-08 15:38:04

标签: ios opengl-es drawing

我们正在将GLPaint示例用于新应用。 我们希望向用户演示绘制少量对象的方法。 我们看到苹果GLPaint有一个关于如何回放图纸数据的例子。

所以我们设法提供了我们自己的数据,除了让它倒置的问题之外,它还能很好地工作。

当提供的点数是 -

alt text

它将绘制

alt text

有一个简单的解决方案吗?

谢谢,Shani

2 个答案:

答案 0 :(得分:2)

iPhone坐标系向上读取,而openGL使用笛卡尔系统。因此,openGL中的所有绘图都将颠倒在iPhone上。在渲染时尝试颠倒图像。

答案 1 :(得分: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];

}

我是编程新手,所以我希望我的代码没有问题。 希望它会有所帮助

SHANI