void dbg_draw_viewport( const T &cam_info, float _viewport_near ) { VERIFY( _viewport_near > 0.f ); const Fvector near_plane_center = Fvector().mad( cam_info.Position(), cam_info.Direction(), _viewport_near ); float h_w, h_h; viewport_size ( _viewport_near, cam_info, h_w, h_h ); const Fvector right = Fvector().mul( cam_info.Right(), h_w ); const Fvector up = Fvector().mul( cam_info.Up(), h_h ); const Fvector top_left = Fvector().sub( near_plane_center, right ).add( up ); const Fvector top_right = Fvector().add( near_plane_center, right ).add( up ); const Fvector bottom_left = Fvector().sub( near_plane_center, right ).sub( up ); const Fvector bottom_right = Fvector().add( near_plane_center, right ).sub( up ); DBG_DrawLine( cam_info.Position(), top_left, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( cam_info.Position(), top_right, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( cam_info.Position(), bottom_left, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( cam_info.Position(), bottom_right, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( top_right, top_left, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( bottom_right, top_right, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( top_left, bottom_left, D3DCOLOR_XRGB(255, 0, 0 ) ); DBG_DrawLine( bottom_left, bottom_right, D3DCOLOR_XRGB(255, 0, 0 ) ); }
void QcMapItem::geometryChanged(const QRectF & new_geometry, const QRectF & old_geometry) { // qInfo() << old_geometry << "->" << new_geometry; QQuickItem::geometryChanged(new_geometry, old_geometry); QSize viewport_size(new_geometry.width(), new_geometry.height()); // Fixme: QSizeF size() // Fixme: pass devicePixelRatio here ? m_viewport->set_viewport_size(viewport_size, window()->devicePixelRatio()); }
QcMapView::QcMapView() : QObject(), m_viewport(nullptr), // initialised in ctor m_map_scene(nullptr) // initialised in ctor { // Fixme: need to pass fake state QcWgsCoordinate coordinate_origin(0, 0); int tile_size = 256; // map can have different tile size ! Use the most common ? // map_size = EQUATORIAL_PERIMETER here QcTiledZoomLevel tiled_zoom_level(EQUATORIAL_PERIMETER, tile_size, 0); QcViewportState viewport_state(coordinate_origin, tiled_zoom_level, 0); QSize viewport_size(0, 0); m_viewport = new QcViewport(viewport_state, viewport_size); // Fixme: cf. add_layer m_viewport->set_projection(&QcWebMercatorCoordinate::cls_projection); m_map_scene = new QcMapScene(m_viewport, m_location_circle_data); // parent connect(m_viewport, SIGNAL(viewport_changed()), this, SLOT(update_scene()), Qt::QueuedConnection); }
geom::rect game::engine::viewport() const { return geom::rect( camera_origin(), viewport_size() ); }