使用WhirlyGlobeComponet在Globe上创建纬度线时的问题

时间:2013-07-31 09:27:57

标签: ipad cocoa-touch ios6 opengl-es

我正在开发WhirlyGlobe组件测试器应用程序(由mousebird团队在ios中为globe应用程序提供的优秀框架)并尝试创建纬度和经度。我使用这种方法在地球上创造了经度:- (void)addGreatCircles:(LocationInfo *)locations len:(int)len stride:(int)stride offset:(int)offset 并在数组中分配值:LocationInfo locations[NumLocations] 但是当我尝试在地球上创建纬度时,通过给出as:

中的坐标
LocationInfo locations[NumLocations] = {
{"twenty five",0, 180},
{"twenty six",0, -10}
 // {"three",30,180.0},
 //  {"four",30,0},
// {"five",60, 180},
 //{"six",60, 0},
}

和儿子......我只能在地球上获得一半的纬度线。我不知道为什么会出现这个问题。这是由于OpenGL还是什么。有人请帮我正确地做。 我给出起点(0,-180)终点(0,0)时的屏幕截图如图IM-1,2所示:

IMAGE-1 enter image description here

IMAGE-2 enter image description here

我需要的是在Globe上绘制的完整纬度线。使用起点(0,0)到终点(0,360)给我一个空白输出(地球上没有画线)。 我已尝试使用起点(0,10)终点(0,-10),以便该线覆盖整个地球但尚未成功。请帮助人!!

1 个答案:

答案 0 :(得分:3)

首先,您需要转到github上的develop分支。那是即将发布的2.2版本。

我在测试应用程序中添加了一个完全相同的示例。

enter image description here

以下是我们如何解决这个问题。

- (void)addLinesLon:(float)lonDelta lat:(float)latDelta color:(UIColor *)color
{
    NSMutableArray *vectors = [[NSMutableArray alloc] init];
    NSDictionary *desc = @{kMaplyColor: color, kMaplySubdivType: kMaplySubdivSimple, kMaplySubdivEpsilon: @(0.001), kMaplyVecWidth: @(4.0), kMaplyDrawPriority: @(1000)};
    // Longitude lines
    for (float lon = -180;lon < 180;lon += lonDelta)
    {
        MaplyCoordinate coords[3];
        coords[0] = MaplyCoordinateMakeWithDegrees(lon, -90);
        coords[1] = MaplyCoordinateMakeWithDegrees(lon, 0);
        coords[2] = MaplyCoordinateMakeWithDegrees(lon, +90);
        MaplyVectorObject *vec = [[MaplyVectorObject alloc] initWithLineString:coords numCoords:3 attributes:nil];
        [vectors addObject:vec];
    }
    // Latitude lines
    for (float lat = -90;lat < 90;lat += latDelta)
    {
        MaplyCoordinate coords[5];
        coords[0] = MaplyCoordinateMakeWithDegrees(-180, lat);
        coords[1] = MaplyCoordinateMakeWithDegrees(-90, lat);
        coords[2] = MaplyCoordinateMakeWithDegrees(0, lat);
        coords[3] = MaplyCoordinateMakeWithDegrees(90, lat);
        coords[4] = MaplyCoordinateMakeWithDegrees(+180, lat);
        MaplyVectorObject *vec = [[MaplyVectorObject alloc] initWithLineString:coords numCoords:5 attributes:nil];
        [vectors addObject:vec];
    }

    latLonObj = [baseViewC addVectors:vectors desc:desc];
}

WhirlyGlobe-Maply 2.2为矢量渲染和细分添加了一些技巧。您现在可以告诉工具包将细分到epsilon以使它们可以接受。我们也可以在另一个上面渲染一个东西而不用担心z缓冲。所以你去,现在很容易。

这里唯一真正的诡计是我们必须将线条分成几部分。我们需要至少三个点,否则细分逻辑将只检测退化情况。纬度的5点线可以使用一些错误测试逻辑。