Draw space background in SystemView
- Steal the current space's background object; ideally SystemView should have its own copy it generates for systems - Don't draw stars sourced from the current system's position when looking at other systems - The background system in general doesn't respect the plane of the ecliptic vs the galactic plane. This is a problem that affects WorldView as well as the SystemViewmaster
parent
365476dfe3
commit
013721f405
|
@ -108,6 +108,7 @@ namespace Background {
|
||||||
|
|
||||||
void SetIntensity(float intensity);
|
void SetIntensity(float intensity);
|
||||||
void SetDrawFlags(const Uint32 flags);
|
void SetDrawFlags(const Uint32 flags);
|
||||||
|
Uint32 GetDrawFlags() const { return m_drawFlags; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Graphics::Renderer *m_renderer;
|
Graphics::Renderer *m_renderer;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "SystemView.h"
|
#include "SystemView.h"
|
||||||
|
|
||||||
#include "AnimationCurves.h"
|
#include "AnimationCurves.h"
|
||||||
|
#include "Background.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "GameLog.h"
|
#include "GameLog.h"
|
||||||
#include "Input.h"
|
#include "Input.h"
|
||||||
|
@ -319,12 +320,8 @@ void SystemView::CalculateFramePositionAtTime(FrameId frameId, double t, vector3
|
||||||
void SystemView::Draw3D()
|
void SystemView::Draw3D()
|
||||||
{
|
{
|
||||||
PROFILE_SCOPED()
|
PROFILE_SCOPED()
|
||||||
// We need to adjust the "far" cutoff plane, so that at high magnifications you can see
|
|
||||||
// distant objects in the background.
|
|
||||||
m_renderer->SetPerspectiveProjection(CAMERA_FOV, m_renderer->GetDisplayAspect(), 1.f, 1000.f * m_zoom * float(AU) + DEFAULT_VIEW_DISTANCE * 2);
|
|
||||||
m_renderer->ClearScreen();
|
m_renderer->ClearScreen();
|
||||||
m_projected.clear();
|
m_projected.clear();
|
||||||
//TODO add reserve
|
|
||||||
|
|
||||||
SystemPath path = m_game->GetSectorView()->GetSelected().SystemOnly();
|
SystemPath path = m_game->GetSectorView()->GetSelected().SystemOnly();
|
||||||
if (m_system) {
|
if (m_system) {
|
||||||
|
@ -346,6 +343,31 @@ void SystemView::Draw3D()
|
||||||
m_unexplored = m_system->GetUnexplored();
|
m_unexplored = m_system->GetUnexplored();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set up the perspective projection for the background stars
|
||||||
|
m_renderer->SetPerspectiveProjection(CAMERA_FOV, m_renderer->GetDisplayAspect(), 1.f, 1500.f);
|
||||||
|
|
||||||
|
matrix4x4d trans2bg = matrix4x4d::Identity();
|
||||||
|
trans2bg.RotateX(DEG2RAD(-m_rot_x));
|
||||||
|
trans2bg.RotateY(DEG2RAD(-m_rot_y));
|
||||||
|
auto *background = m_game->GetSpace()->GetBackground();
|
||||||
|
// Background is rotated around (0,0,0) and drawn
|
||||||
|
background->SetIntensity(0.6);
|
||||||
|
if (!m_game->GetSpace()->GetStarSystem()->GetPath().IsSameSystem(path)) {
|
||||||
|
Uint32 cachedFlags = background->GetDrawFlags();
|
||||||
|
background->SetDrawFlags(Background::Container::DRAW_SKYBOX);
|
||||||
|
background->Draw(trans2bg);
|
||||||
|
background->SetDrawFlags(cachedFlags);
|
||||||
|
} else {
|
||||||
|
background->Draw(trans2bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_renderer->ClearDepthBuffer();
|
||||||
|
|
||||||
|
// We need to adjust the "far" cutoff plane, so that at high magnifications you can see
|
||||||
|
// distant objects in the background.
|
||||||
|
m_renderer->SetPerspectiveProjection(CAMERA_FOV, m_renderer->GetDisplayAspect(), 1.f, 1000.f * m_zoom * float(AU) + DEFAULT_VIEW_DISTANCE * 2);
|
||||||
|
//TODO add reserve
|
||||||
|
|
||||||
// The matrix is shifted from the (0,0,0) by DEFAULT_VIEW_DISTANCE
|
// The matrix is shifted from the (0,0,0) by DEFAULT_VIEW_DISTANCE
|
||||||
// and then rotated (around 0,0,0) and scaled by m_zoom, shift doesn't scale.
|
// and then rotated (around 0,0,0) and scaled by m_zoom, shift doesn't scale.
|
||||||
// m_zoom default value is 1/AU.
|
// m_zoom default value is 1/AU.
|
||||||
|
|
Loading…
Reference in New Issue