<jscript>
var GlobeModel = {
HAng: 0,
VAng: 0,
Dist: 100,
Scale: 5,
Rot: 0,
graph: null,
Update: function( field ) {
ControlPanels.Update();
this.Draw( this.graph );
},
Draw: function( g ) {
g.Reset3D( true ); // clear graphic
g.SetAngleMeasure( 'deg' );
var alpha = Math.acos( EarthMap.Radius / this.Dist );
var scale = this.Scale * EarthMap.Radius / Math.cos( Math.PI/2 - alpha );
g.SetCameraScale( scale );
g.SetCameraView( [0,0,0], this.HAng, this.VAng, this.Dist );
var VpScaleArgs = true;
var VpClip = false;
var VpLeft = 8;
var VpTop = 8;
var VpRight = -8;
var VpBottom = -8;
g.SetViewport( VpLeft, VpTop, VpRight, VpBottom, VpScaleArgs, VpClip );
g.SetWindowToCameraScreen();
g.SetCameraClipping( 0.001 );
EarthMap.SetLandColor( 'Antarctica', '#ddd', '#bbb' );
g.TransRotateVect3D( [0,0,1], this.Rot );
g.TransRotateVect3D( [1,-1,0], -23.4 );
g.TransMove3D( -1, -1, 1 );
EarthMap.Trans = g.Trans3D;
g.ResetTrans3D();
EarthMap.DrawGlobe( g );
g.SetAreaAttr( 'black', 'black' );
g.SetAlpha( 0.5 );
EarthMap.DrawGlobeShadow( g, [1,-1,0], 0 );
EarthMap.DrawGlobeGrid( g );
g.SetAlpha( 1 );
g.TransRotateVect3D( [0,0,1], this.Rot + 180 );
g.TransRotateVect3D( [1,-1,0], 23.4 );
g.TransMove3D( -1, 1, -1 );
EarthMap.Trans = g.Trans3D;
g.ResetTrans3D();
EarthMap.DrawGlobe( g );
g.SetAreaAttr( 'black', 'black' );
g.SetAlpha( 0.5 );
EarthMap.DrawGlobeShadow( g, [1,-1,0], 0 );
EarthMap.DrawGlobeGrid( g );
g.SetAlpha( 1 );
},
};
GlobeModel.graph = NewGraphX3D( {
Id: 'GlobeModelCanvas',
Width: '100%',
Height: '56%',
DrawFunc: function(g){ GlobeModel.Draw(g); },
AutoReset: false,
AutoClear: false,
AutoScalePix: true
} );
ControlPanels.NewSliderPanel( {
ModelRef: 'GlobeModel',
NCols: 2,
ValuePos: 'left',
OnModelChange: function(field){ GlobeModel.Update(field); },
Format: 'fix0',
Digits: 1,
ReadOnly: false,
PanelFormat: 'InputShortWidth'
} ).AddValueSliderField( {
Name: 'HAng',
Min: -180,
Max: 360+180
} ).AddValueSliderField( {
Name: 'VAng',
Min: -89.9,
Max: 89.9
} ).AddValueSliderField( {
Name: 'Dist',
Digits: 0,
Min: 1.5,
Max: 100
} ).AddValueSliderField( {
Name: 'Scale',
Digits: 0,
Min: 2.2,
Max: 10
} ).AddValueSliderField( {
Name: 'Rot',
Digits: 0,
Min: -180,
Max: 360+180
} ).Render();
xOnLoad( function(){ GlobeModel.Update(); } );
</jscript>