glob3mobile / g3m

The multiplatform advanced visualization framework
http://www.glob3mobile.com/
Other
117 stars 56 forks source link

How to add line (great circle) #80

Closed loukotka closed 10 years ago

loukotka commented 10 years ago

Dears, how can I add simple line (with specific color and width) connecting two 3D points? (e.g. flight routes)? I have found this snippet on http://serdis.dis.ulpgc.es/~atrujill/glob3m/Tutorial/vectorialGeometry.html :

// drawing lines Shape line1 = new LineShape(new Geodetic3D(Angle.fromDegrees(39.69), Angle.fromDegrees(3.31), 6000), // start position new Geodetic3D(Angle.fromDegrees(39.56), Angle.fromDegrees(3.39), 6000), // end position AltitudeMode.ABSOLUTE, // altitude mode 8, // pixel size Color.fromRGBA(1, 0.5f, 0, 1)); // color shapesRenderer.addShape(line1);

but it seems the class LineShape is gone. I have just found code working with BoxShapes (part of the DEMO application)

Any help would be appreciated. Thanks, Tomas Loukotka

DiegoGomezDeck commented 10 years ago

Hello @loukotka

Please take a look to TrailsRenderer and Trail classes. They support to render such "flight routes" with a ribbon like this:

screen shot 2014-06-17 at 11 04 00 am

Let me know it this helps.

loukotka commented 10 years ago

Thanks for pointing me in the right direction... Unfortunately I still cannot see my line rendered. I just replaced renderer stuff in 3D Model example from demo application in this way: ... final TrailsRenderer trailsRenderer = new TrailsRenderer(); Trail trail = new Trail(Color.fromRGBA255(225, 10, 10, 120), 5, 10); trailsRenderer.addTrail(trail);
trail.addPosition(Angle.fromDegrees(50), Angle.fromDegrees(50), 0); trail.addPosition(Angle.fromDegrees(40), Angle.fromDegrees(-40), 10); ... Am I missing something here? Thanks

DiegoGomezDeck commented 10 years ago

Did you add the trailsRenderer to the renderers-list?

DiegoGomezDeck commented 10 years ago

And those positions looks suspicious

trail.addPosition(Angle.fromDegrees(50), Angle.fromDegrees(50), 0); trail.addPosition(Angle.fromDegrees(40), Angle.fromDegrees(-40), 10);

(10,10) degrees delta, and just 10 meters of difference.... for sure this code will produce a Trail under the ground.

Take in mind that Trail doesn't interpolate between positions, is your responsibility to create the inner-interpolated positions.

loukotka commented 10 years ago

Yes, I have added renderer like: _builder.addRenderer(trailsRenderer);

but I will try to add more positions with higher heights, and I will let you know then.

loukotka commented 10 years ago

My current code: ... final TrailsRenderer trailsRenderer = new TrailsRenderer(); Trail trail = new Trail(Color.fromRGBA255(225, 10, 10, 120), 3, 10000); trailsRenderer.addTrail(trail);
trail.addPosition(Angle.fromDegrees(50), Angle.fromDegrees(10), 100); trail.addPosition(Angle.fromDegrees(49.5), Angle.fromDegrees(11), 150); trail.addPosition(Angle.fromDegrees(49), Angle.fromDegrees(12), 200); trail.addPosition(Angle.fromDegrees(48), Angle.fromDegrees(13), 250); trail.addPosition(Angle.fromDegrees(47), Angle.fromDegrees(13), 250); _builder.addRenderer(trailsRenderer); _g3mWidget = _builder.createWidget(); ...

is still not successful in rendering the trails. I have checked that the method render is called consequently on: TrailsRenderer, Trail, TrailSegment and even generated Mesh, but I still cannot see anything.

DiegoGomezDeck commented 10 years ago

I didn't try your code, but I see something strange in the trail construction.

This is the constructor definition: Trail(Color color, float ribbonWidth, float heightDelta)

This is your instantiation: Trail trail = new Trail(Color.fromRGBA255(225, 10, 10, 120), 3, 10000);

float ribbonWidth: You are asking for a trail with a width of 3 meters, too thin for such a large trail. float heightDelta: This is a delta (in meters) for the positions heights. In you example, the final heights of the trail will be 100+100000, 150+100000, 200+10000, and so on.

loukotka commented 10 years ago

I finally got it working with: ... final TrailsRenderer trailsRenderer = new TrailsRenderer(); Trail trail = new Trail(Color.fromRGBA255(225, 10, 10, 255), 50000, 15000); trailsRenderer.addTrail(trail);
trail.addPosition(Angle.fromDegrees(50), Angle.fromDegrees(10), 0); trail.addPosition(Angle.fromDegrees(49.5), Angle.fromDegrees(11), 4000); trail.addPosition(Angle.fromDegrees(49), Angle.fromDegrees(12), 8000); trail.addPosition(Angle.fromDegrees(48), Angle.fromDegrees(13), 15000); trail.addPosition(Angle.fromDegrees(47), Angle.fromDegrees(13), 15000); ... Thank you very much for your help.