//! 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);
	}
Example #5
0
// 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");
	}