/*****************************************************************************
 * $LastChangedDate: 2011-08-20 12:07:38 -0400 (Sat, 20 Aug 2011) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   World definitions.
 *          THESE ARE GLOBALS!  TRY TO USE ONLY BASIC COMPILE-TIME CONSTANTS.
 *//*
 * LEGAL:   COPYRIGHT (C) 2007 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef WORLD_DEFS_HH
#define WORLD_DEFS_HH 1

#include "math/module.hh"
using namespace math;
#include "physics/types.hh"
using namespace physics;

namespace world {
namespace defs {

/// A Vector in world space that points up.  World::ComputeUpVector() does conversion.
const WorldVertex WORLD_UP_VECTOR( 0.0f, 0.0f, 1.0f );

// Symbolic names for world axises (N/A to matrix axises).
// World axises vs. eye matrix axises:
// In terms of depth, Z defines depth in both world and eye space.
// But in terms of altitude (up/down), Y is up/down in eye space
// while Z is up/down in world space.
const uint AXIS_LAT = XX, LAT = XX,  // X latitude
           AXIS_LON = YY, LON = YY,  // Y longitude
           AXIS_ALT = ZZ, ALT = ZZ;  // Z altitude

// Macro for constructing a Vector3 independent of definition of axises.
// (For future, this may help to facilitate changing order of axises.)
// WorldVertex pos( LAT_LON_ALT( lat, lon, alt ) );
#define LAT_LON_ALT( LAT, LON, ALT )  (LAT), (LON), (ALT)

// OSG render bins:
const int RENDER_BIN_SKY_DOME = -16;

} // namespace defs
} // namespace world

using world::defs::LAT;
using world::defs::LON;
using world::defs::ALT;

#endif // WORLD_DEFS_HH
