//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- void Renderer::RecalcProjection() { if( m_projection == PROJECTION_TYPE_PERSPECTIVE ) { SetPerspectiveFov( m_width, m_height ); } else if( m_projection == PROJECTION_TYPE_ORTHOGRAPHIC ) { SetOrthographic( m_width, m_height ); } }
//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- void Renderer::SetProjectionType( eProjectionType type ) { m_projection = type; if( m_projection == PROJECTION_TYPE_PERSPECTIVE ) { SetPerspectiveFov( m_width, m_height ); } else if( m_projection == PROJECTION_TYPE_ORTHOGRAPHIC ) { SetOrthographic( m_width, m_height ); } }
//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- bool Renderer::Resize( int width, int height ) { m_width = width; m_height = height; if( m_projection == PROJECTION_TYPE_PERSPECTIVE ) { SetPerspectiveFov( width, height ); } else if( m_projection == PROJECTION_TYPE_ORTHOGRAPHIC ) { SetOrthographic( width, height ); } ResetDevice(); return true; }
OGRErr OGRSpatialReference::importFromUSGS( long iProjSys, long iZone, double *padfPrjParams, long iDatum, int bAnglesInPackedDMSFormat ) { if( !padfPrjParams ) return OGRERR_CORRUPT_DATA; double (*pfnUnpackAnglesFn)(double); if (bAnglesInPackedDMSFormat) pfnUnpackAnglesFn = CPLPackedDMSToDec; else pfnUnpackAnglesFn = OGRSpatialReferenceUSGSUnpackNoOp; /* -------------------------------------------------------------------- */ /* Operate on the basis of the projection code. */ /* -------------------------------------------------------------------- */ switch ( iProjSys ) { case GEO: break; case UTM: { int bNorth = TRUE; if ( !iZone ) { if ( padfPrjParams[2] != 0.0 ) iZone = (long) padfPrjParams[2]; else if (padfPrjParams[0] != 0.0 && padfPrjParams[1] != 0.0) { iZone = (long)(((pfnUnpackAnglesFn(padfPrjParams[0]) + 180.0) / 6.0) + 1.0); if ( pfnUnpackAnglesFn(padfPrjParams[0]) < 0 ) bNorth = FALSE; } } if ( iZone < 0 ) { iZone = -iZone; bNorth = FALSE; } SetUTM( iZone, bNorth ); } break; case SPCS: { int bNAD83 = TRUE; if ( iDatum == 0 ) bNAD83 = FALSE; else if ( iDatum != 8 ) CPLError( CE_Warning, CPLE_AppDefined, "Wrong datum for State Plane projection %d. " "Should be 0 or 8.", (int) iDatum ); SetStatePlane( iZone, bNAD83 ); } break; case ALBERS: SetACEA( pfnUnpackAnglesFn(padfPrjParams[2]), pfnUnpackAnglesFn(padfPrjParams[3]), pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case LAMCC: SetLCC( pfnUnpackAnglesFn(padfPrjParams[2]), pfnUnpackAnglesFn(padfPrjParams[3]), pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case MERCAT: SetMercator( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), 1.0, padfPrjParams[6], padfPrjParams[7] ); break; case PS: SetPS( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), 1.0, padfPrjParams[6], padfPrjParams[7] ); break; case POLYC: SetPolyconic( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case EQUIDC: if ( padfPrjParams[8] ) { SetEC( pfnUnpackAnglesFn(padfPrjParams[2]), pfnUnpackAnglesFn(padfPrjParams[3]), pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); } else { SetEC( pfnUnpackAnglesFn(padfPrjParams[2]), pfnUnpackAnglesFn(padfPrjParams[2]), pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); } break; case TM: SetTM( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[2], padfPrjParams[6], padfPrjParams[7] ); break; case STEREO: SetStereographic( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), 1.0, padfPrjParams[6], padfPrjParams[7] ); break; case LAMAZ: SetLAEA( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case AZMEQD: SetAE( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case GNOMON: SetGnomonic( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case ORTHO: SetOrthographic( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; // FIXME: GVNSP --- General Vertical Near-Side Perspective skipped case SNSOID: SetSinusoidal( pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case EQRECT: SetEquirectangular2( 0.0, pfnUnpackAnglesFn(padfPrjParams[4]), pfnUnpackAnglesFn(padfPrjParams[5]), padfPrjParams[6], padfPrjParams[7] ); break; case MILLER: SetMC( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case VGRINT: SetVDG( pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; case HOM: if ( padfPrjParams[12] ) { SetHOM( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[4]), pfnUnpackAnglesFn(padfPrjParams[3]), 0.0, padfPrjParams[2], padfPrjParams[6], padfPrjParams[7] ); } else { SetHOM2PNO( pfnUnpackAnglesFn(padfPrjParams[5]), pfnUnpackAnglesFn(padfPrjParams[9]), pfnUnpackAnglesFn(padfPrjParams[8]), pfnUnpackAnglesFn(padfPrjParams[11]), pfnUnpackAnglesFn(padfPrjParams[10]), padfPrjParams[2], padfPrjParams[6], padfPrjParams[7] ); } break; case ROBIN: SetRobinson( pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; // FIXME: SOM --- Space Oblique Mercator skipped // FIXME: ALASKA --- Alaska Conformal skipped // FIXME: GOODE --- Interrupted Goode skipped case MOLL: SetMollweide( pfnUnpackAnglesFn(padfPrjParams[4]), padfPrjParams[6], padfPrjParams[7] ); break; // FIXME: IMOLL --- Interrupted Mollweide skipped // FIXME: HAMMER --- Hammer skipped case WAGIV: SetWagner( 4, 0.0, padfPrjParams[6], padfPrjParams[7] ); break; case WAGVII: SetWagner( 7, 0.0, padfPrjParams[6], padfPrjParams[7] ); break; // FIXME: OBEQA --- Oblated Equal Area skipped // FIXME: ISINUS1 --- Integerized Sinusoidal Grid (the same as 99) skipped // FIXME: CEA --- Cylindrical Equal Area skipped (Grid corners set in meters for EASE grid) // FIXME: BCEA --- Cylindrical Equal Area skipped (Grid corners set in DMS degs for EASE grid) // FIXME: ISINUS --- Integrized Sinusoidal skipped default: CPLDebug( "OSR_USGS", "Unsupported projection: %ld", iProjSys ); SetLocalCS( CPLString().Printf("GCTP projection number %ld", iProjSys) ); break; } /* -------------------------------------------------------------------- */ /* Try to translate the datum/spheroid. */ /* -------------------------------------------------------------------- */ if ( !IsLocal() ) { char *pszName = NULL; double dfSemiMajor, dfInvFlattening; if ( iDatum < 0 ) // Use specified ellipsoid parameters { if ( padfPrjParams[0] > 0.0 ) { if ( padfPrjParams[1] > 1.0 ) { if( ABS(padfPrjParams[0] - padfPrjParams[1]) < 0.01 ) dfInvFlattening = 0.0; else { dfInvFlattening = padfPrjParams[0] / ( padfPrjParams[0] - padfPrjParams[1] ); } } else if ( padfPrjParams[1] > 0.0 ) { dfInvFlattening = 1.0 / ( 1.0 - sqrt(1.0 - padfPrjParams[1]) ); } else dfInvFlattening = 0.0; SetGeogCS( "Unknown datum based upon the custom spheroid", "Not specified (based on custom spheroid)", "Custom spheroid", padfPrjParams[0], dfInvFlattening, NULL, 0, NULL, 0 ); } else if ( padfPrjParams[1] > 0.0 ) // Clarke 1866 { if ( OSRGetEllipsoidInfo( 7008, &pszName, &dfSemiMajor, &dfInvFlattening ) == OGRERR_NONE ) { SetGeogCS( CPLString().Printf( "Unknown datum based upon the %s ellipsoid", pszName ), CPLString().Printf( "Not specified (based on %s spheroid)", pszName ), pszName, dfSemiMajor, dfInvFlattening, NULL, 0.0, NULL, 0.0 ); SetAuthority( "SPHEROID", "EPSG", 7008 ); } } else // Sphere, rad 6370997 m { if ( OSRGetEllipsoidInfo( 7047, &pszName, &dfSemiMajor, &dfInvFlattening ) == OGRERR_NONE ) { SetGeogCS( CPLString().Printf( "Unknown datum based upon the %s ellipsoid", pszName ), CPLString().Printf( "Not specified (based on %s spheroid)", pszName ), pszName, dfSemiMajor, dfInvFlattening, NULL, 0.0, NULL, 0.0 ); SetAuthority( "SPHEROID", "EPSG", 7047 ); } } } else if ( iDatum < NUMBER_OF_ELLIPSOIDS && aoEllips[iDatum] ) { if( OSRGetEllipsoidInfo( aoEllips[iDatum], &pszName, &dfSemiMajor, &dfInvFlattening ) == OGRERR_NONE ) { SetGeogCS( CPLString().Printf("Unknown datum based upon the %s ellipsoid", pszName ), CPLString().Printf( "Not specified (based on %s spheroid)", pszName ), pszName, dfSemiMajor, dfInvFlattening, NULL, 0.0, NULL, 0.0 ); SetAuthority( "SPHEROID", "EPSG", aoEllips[iDatum] ); } else { CPLError( CE_Warning, CPLE_AppDefined, "Failed to lookup datum code %d, likely due to missing GDAL gcs.csv\n" " file. Falling back to use WGS84.", (int) iDatum ); SetWellKnownGeogCS("WGS84" ); } } else { CPLError( CE_Warning, CPLE_AppDefined, "Wrong datum code %d. Supported datums 0--%d only.\n" "Setting WGS84 as a fallback.", (int) iDatum, NUMBER_OF_ELLIPSOIDS ); SetWellKnownGeogCS( "WGS84" ); } if ( pszName ) CPLFree( pszName ); } /* -------------------------------------------------------------------- */ /* Grid units translation */ /* -------------------------------------------------------------------- */ if( IsLocal() || IsProjected() ) SetLinearUnits( SRS_UL_METER, 1.0 ); FixupOrdering(); return OGRERR_NONE; }
void Camera::Set2DOrthographic(float width, float height) { SetOrthographic(width, height, 0.0f, 1.0f); }
//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- bool Renderer::Initialize( HWND handle, int width, int height ) { HRESULT hr; D3DPRESENT_PARAMETERS d3dp; ZeroMemory(&d3dp, sizeof(d3dp)); d3dp.BackBufferWidth = width; d3dp.BackBufferHeight = height; d3dp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dp.BackBufferCount = 1; d3dp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dp.Windowed = TRUE; d3dp.hDeviceWindow = handle; d3dp.EnableAutoDepthStencil = TRUE; d3dp.AutoDepthStencilFormat = D3DFMT_D16; m_d3d = Direct3DCreate9(D3D_SDK_VERSION); if( m_d3d == NULL ) return false; D3DDEVTYPE deviceTypes[4]; DWORD flags[4]; deviceTypes[0] = D3DDEVTYPE_HAL; flags[0] = D3DCREATE_HARDWARE_VERTEXPROCESSING; deviceTypes[1] = D3DDEVTYPE_HAL; flags[1] = D3DCREATE_SOFTWARE_VERTEXPROCESSING; deviceTypes[2] = D3DDEVTYPE_REF; flags[2] = D3DCREATE_HARDWARE_VERTEXPROCESSING; deviceTypes[3] = D3DDEVTYPE_REF; flags[3] = D3DCREATE_SOFTWARE_VERTEXPROCESSING; for( int ind = 0; ind < 4; ind++ ) { hr = m_d3d->CreateDevice( D3DADAPTER_DEFAULT, deviceTypes[ind], handle, flags[ind], &d3dp, &m_d3d_device ); if( SUCCEEDED( hr ) ) break; } if( FAILED( hr ) ) { ES_SAFE_RELEASE( m_d3d_device ); ES_SAFE_RELEASE( m_d3d ); return false; } m_handle = handle; m_width = width; m_height = height; m_renderer = (::EffekseerRendererDX9::RendererImplemented*)::EffekseerRendererDX9::Renderer::Create( m_d3d_device, m_squareMaxCount ); m_renderer->SetDistortingCallback(new DistortingCallback(this)); // グリッド生成 m_grid = ::EffekseerRenderer::Grid::Create( m_renderer ); // ガイド作成 m_guide = ::EffekseerRenderer::Guide::Create( m_renderer ); m_culling = ::EffekseerRenderer::Culling::Create( m_renderer ); // 背景作成 m_background = ::EffekseerRenderer::Paste::Create( m_renderer ); if( m_projection == PROJECTION_TYPE_PERSPECTIVE ) { SetPerspectiveFov( width, height ); } else if( m_projection == PROJECTION_TYPE_ORTHOGRAPHIC ) { SetOrthographic( width, height ); } GenerateRenderTargets(m_width, m_height); return true; }
void Enable2D() { glDisable(GL_LIGHTING); //glEnable(GL_TEXTURE_2D); SetOrthographic(); }