//! update viewports sizes void ShootEditor::UpdateViewPortsSizes() { if(EditorSettings::Instance()->WindowSize == EditorSettings::WS_Stretch) { ViewPort* pViewPort = GetViewPort(); pViewPort->SetPosition(wxPoint(0, 0)); pViewPort->SetSize(GetTabContainer()->GetViewPortContainer()->GetSize()); } else { Size size = EditorSettings::WindowSizes[EditorSettings::Instance()->WindowSize]; ViewPort* pViewPort = GetViewPort(); wxSize viewPortSize = pViewPort->GetSize(); wxPoint center = wxPoint((viewPortSize.x - size.Width)/2, (viewPortSize.y - size.Height)/2); pViewPort->SetPosition(center); pViewPort->SetSize(wxSize(size.Width, size.Height)); } }
hsScalarTriple plViewTransform::NDCToScreen(const hsScalarTriple& ndc) const { hsPoint2 vpMin, vpMax; GetViewPort(vpMin, vpMax); hsPoint3 scrP; scrP.fX = (ndc.fX + 1.f) * 0.5f * (vpMax.fX - vpMin.fX) + vpMin.fX; scrP.fY = (-ndc.fY + 1.f) * 0.5f * (vpMax.fY - vpMin.fY) + vpMin.fY; scrP.fZ = ndc.fZ; return scrP; }
hsScalarTriple plViewTransform::ScreenToNDC(const hsScalarTriple& scrP) const { hsPoint2 vpMin, vpMax; GetViewPort(vpMin, vpMax); hsPoint3 ndc; ndc.fX = (scrP.fX - vpMin.fX) / (vpMax.fX - vpMin.fX) * 2.f - 1.f; ndc.fY = (vpMax.fY - scrP.fY) / (vpMax.fY - vpMin.fY) * 2.f - 1.f; ndc.fZ = scrP.fZ; return ndc; }
//! Updates the editor void ShootEditor::Update() { if(IsEngineRunning()) { App::Instance()->Update(m_fDeltaTime); } else { // always update the following Engine::Instance()->CalculateFPS(m_fDeltaTime); EventManager::Instance()->Update(); ResourceManager::Instance()->Update(); } char buf[16]; sprintf(buf, "FPS: %.2f", Engine::Instance()->GetFPS()); static_cast<wxFrame*>(wxTheApp->GetTopWindow())->SetStatusText(buf); // refresh the rendering window GetViewPort()->Refresh(true); }
// where is CCamera::SetFov(float fov)??? LUAMTA_FUNCTION(camera, SetFov) { auto self = my->ToCameraPtr(1); int x = 0; int y = 0; int w = 0; int h = 0; self->GetViewPort(x, y, w, h); self->SetFrustum( my->ToNumber(1, h), my->ToNumber(2, w), my->ToNumber(3, my->ToNumber(2)), my->ToNumber(4, self->GetNearPlane()), my->ToNumber(5, self->GetFarPlane()), my->ToNumber(6, self->GetPixelAspectRatio()) ); return 0; }
//! Initialize the editor void ShootEditor::Init(MainFrame* pFrame) { // create the tab control //wxNotebook* pTabControl = new wxNotebook(pFrame, wxID_ANY, wxDefaultPosition, wxSize(240, 800)); m_pTreeView = new TreeView(pFrame); //pTabControl->AddPage(m_pTreeView, "Tree", true); //pTabControl->AddPage(m_pObjectInspector, "Properties", true); pFrame->GetUIManager().AddPane(m_pTreeView, wxAuiPaneInfo().Left().CaptionVisible(false).CloseButton(false)); m_pObjectInspector = new ObjectInspector(pFrame); pFrame->GetUIManager().AddPane(m_pObjectInspector, wxAuiPaneInfo().Right().CaptionVisible(false).CloseButton(false)); // create the tab container m_pMainTabControl = new MainTabControl(pFrame); m_pMainTabControl->Init(); pFrame->GetUIManager().AddPane(m_pMainTabControl, wxAuiPaneInfo().Center().MaximizeButton().CloseButton(false).CaptionVisible(false).PaneBorder(false)); //Camera3D* pMainCamera = new Camera3D(); //m_pViewPortContainer[VP_Main] = new ViewPortContainer(pFrame, pMainCamera); //pFrame->GetUIManager().AddPane(m_pViewPortContainer[VP_Main], wxAuiPaneInfo().Center().MaximizeButton().CloseButton(false).Caption("Main")); //Camera3D* pTopCamera = new Camera3D(); //pTopCamera->SetPosition(Vector3::Create(0.0f, 10.0f, 0.001f)); //pTopCamera->SetUpVector(Vector3::Create(0.0f, 0.0f, -1.0f)); //m_pViewPortContainer[VP_Top] = new ViewPortContainer(pFrame, pTopCamera, m_pViewPortContainer[VP_Main]->GetViewPort()->GetContext()); //pFrame->GetUIManager().AddPane(m_pViewPortContainer[VP_Top], wxAuiPaneInfo().Center().MaximizeButton().Right().Caption("Top")); // //Camera3D* pSideCamera = new Camera3D(); //pSideCamera->SetPosition(Vector3::Create(10.0f, 0.0f, 0.0f)); //m_pViewPortContainer[VP_Side] = new ViewPortContainer(pFrame, pSideCamera, m_pViewPortContainer[VP_Main]->GetViewPort()->GetContext()); //pFrame->GetUIManager().AddPane(m_pViewPortContainer[VP_Side], wxAuiPaneInfo().Center().MaximizeButton().Right().Caption("Side")); // create the resource window //m_pResourceWindow = new ResourceWindow(pFrame, wxID_ANY, wxDefaultPosition, wxSize(250, 100)); //pFrame->GetUIManager().AddPane(m_pResourceWindow, wxAuiPaneInfo().Name(wxT("Resources")).Caption(wxT("Resources")).Bottom()); // create the status bar const u32 numFields = 5; wxStatusBar* pStatusBar = pFrame->CreateStatusBar(numFields); int statusWidths[numFields] = { 200, 80, 120, 300, -1 }; pStatusBar->SetStatusWidths(numFields, statusWidths); pFrame->SetStatusText(_T("Ready")); // additional initialization now that the context has been created #ifdef DX11 if(GraphicsDriver::Instance()->GetType() == GraphicsDriver::DT_DirectX11) { HWND hWindow = (HWND)GetViewPort()->GetHWND(); DirectX11Driver::Instance()->SetWindow(hWindow); } #endif // DX11 Engine::Instance()->Init(); EditorSettings::Instance()->Init(); EditorRenderer::Instance()->Init(); EntityRenderer::Instance()->SetRenderViewField(false); //GetTabContainer()->Load("1/Level1.xml"); }