Big Graphics update
Separated LightManager Added Sprite class Added View class Camera is no longer a SceneNode Fixed Material not invalidating programs Renamed CameraPosition uniform to EyePosition Renamed VisibilityTest to FrustumCull Former-commit-id: ff7fbe4d9b31a3c269baab0b48c6faa347a12161
This commit is contained in:
@@ -30,7 +30,7 @@ struct NzSceneImpl
|
||||
NzClock updateClock;
|
||||
NzColor ambientColor = NzColor(25,25,25);
|
||||
NzSceneRoot root;
|
||||
NzCamera* activeCamera;
|
||||
NzAbstractViewer* viewer;
|
||||
bool update;
|
||||
float frameTime;
|
||||
float updateTime;
|
||||
@@ -64,9 +64,9 @@ void NzScene::AddToVisibilityList(NzUpdatable* object)
|
||||
void NzScene::Cull()
|
||||
{
|
||||
#if NAZARA_GRAPHICS_SAFE
|
||||
if (!m_impl->activeCamera)
|
||||
if (!m_impl->viewer)
|
||||
{
|
||||
NazaraError("No active camera");
|
||||
NazaraError("No viewer");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
@@ -76,8 +76,8 @@ void NzScene::Cull()
|
||||
|
||||
m_impl->visibleUpdateList.clear();
|
||||
|
||||
// Frustum culling/Viewport culling
|
||||
RecursiveCameraCull(m_impl->renderTechnique->GetRenderQueue(), m_impl->activeCamera, &m_impl->root);
|
||||
// Frustum culling
|
||||
RecursiveFrustumCull(m_impl->renderTechnique->GetRenderQueue(), m_impl->viewer->GetFrustum(), &m_impl->root);
|
||||
|
||||
///TODO: Occlusion culling
|
||||
|
||||
@@ -87,22 +87,18 @@ void NzScene::Cull()
|
||||
void NzScene::Draw()
|
||||
{
|
||||
#if NAZARA_GRAPHICS_SAFE
|
||||
if (!m_impl->activeCamera)
|
||||
if (!m_impl->viewer)
|
||||
{
|
||||
NazaraError("No active camera");
|
||||
NazaraError("No viewer");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
m_impl->renderTechnique->Clear(this);
|
||||
m_impl->viewer->ApplyView();
|
||||
m_impl->renderTechnique->Draw(this);
|
||||
}
|
||||
|
||||
NzCamera* NzScene::GetActiveCamera() const
|
||||
{
|
||||
return m_impl->activeCamera;
|
||||
}
|
||||
|
||||
NzColor NzScene::GetAmbientColor() const
|
||||
{
|
||||
return m_impl->ambientColor;
|
||||
@@ -123,6 +119,11 @@ NzSceneNode& NzScene::GetRoot() const
|
||||
return m_impl->root;
|
||||
}
|
||||
|
||||
NzAbstractViewer* NzScene::GetViewer() const
|
||||
{
|
||||
return m_impl->viewer;
|
||||
}
|
||||
|
||||
float NzScene::GetUpdateTime() const
|
||||
{
|
||||
return m_impl->updateTime;
|
||||
@@ -161,6 +162,11 @@ void NzScene::SetRenderTechnique(NzAbstractRenderTechnique* renderTechnique)
|
||||
m_impl->renderTechnique.reset(renderTechnique);
|
||||
}
|
||||
|
||||
void NzScene::SetViewer(NzAbstractViewer* viewer)
|
||||
{
|
||||
m_impl->viewer = viewer;
|
||||
}
|
||||
|
||||
void NzScene::SetUpdatePerSecond(unsigned int updatePerSecond)
|
||||
{
|
||||
m_impl->updatePerSecond = updatePerSecond;
|
||||
@@ -209,7 +215,7 @@ NzScene::operator const NzSceneNode&() const
|
||||
return m_impl->root;
|
||||
}
|
||||
|
||||
void NzScene::RecursiveCameraCull(NzAbstractRenderQueue* renderQueue, const NzCamera* camera, NzNode* node)
|
||||
void NzScene::RecursiveFrustumCull(NzAbstractRenderQueue* renderQueue, const NzFrustumf& frustum, NzNode* node)
|
||||
{
|
||||
for (NzNode* child : node->GetChilds())
|
||||
{
|
||||
@@ -218,17 +224,12 @@ void NzScene::RecursiveCameraCull(NzAbstractRenderQueue* renderQueue, const NzCa
|
||||
NzSceneNode* sceneNode = static_cast<NzSceneNode*>(child);
|
||||
|
||||
///TODO: Empêcher le rendu des enfants si le parent est cullé selon un flag
|
||||
sceneNode->UpdateVisibility(camera);
|
||||
sceneNode->UpdateVisibility(frustum);
|
||||
if (sceneNode->IsVisible())
|
||||
sceneNode->AddToRenderQueue(renderQueue);
|
||||
}
|
||||
|
||||
if (child->HasChilds())
|
||||
RecursiveCameraCull(renderQueue, camera, child);
|
||||
RecursiveFrustumCull(renderQueue, frustum, child);
|
||||
}
|
||||
}
|
||||
|
||||
void NzScene::SetActiveCamera(NzCamera* camera)
|
||||
{
|
||||
m_impl->activeCamera = camera;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user