Added visibility state to SceneNode

Former-commit-id: 5325e268a4276d6e2e3e72648641ca03225ab4da
This commit is contained in:
Lynix
2013-03-05 12:09:51 +01:00
parent e26728c424
commit 0e49132cd9
12 changed files with 99 additions and 73 deletions

View File

@@ -51,12 +51,12 @@ class NAZARA_API NzCamera : public NzSceneNode
private:
void AddToRenderQueue(NzRenderQueue& renderQueue) const;
void Invalidate();
bool IsVisible(const NzFrustumf& frustum) const override;
void Register();
void Unregister();
void UpdateFrustum() const;
void UpdateProjectionMatrix() const;
void UpdateViewMatrix() const;
bool VisibilityTest(const NzFrustumf& frustum) override;
mutable NzFrustumf m_frustum;
mutable NzMatrix4f m_projectionMatrix;

View File

@@ -36,8 +36,6 @@ class NAZARA_API NzLight : public NzSceneNode
nzSceneNodeType GetSceneNodeType() const;
NzColor GetSpecularColor() const;
bool IsVisible(const NzFrustumf& frustum) const;
void SetAmbientColor(const NzColor& ambient);
void SetAttenuation(float attenuation);
void SetDiffuseColor(const NzColor& diffuse);
@@ -52,6 +50,7 @@ class NAZARA_API NzLight : public NzSceneNode
void Register();
void Unregister();
void UpdateFrustum();
bool VisibilityTest(const NzFrustumf& frustum);
nzLightType m_type;
NzBoundingBoxf m_boundingBox;

View File

@@ -54,7 +54,6 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable
bool IsAnimationEnabled() const;
bool IsDrawEnabled() const;
bool IsVisible(const NzFrustumf& frustum) const override;
bool LoadFromFile(const NzString& meshPath, const NzModelParameters& modelParameters = NzModelParameters());
bool LoadFromMemory(const void* data, std::size_t size, const NzModelParameters& modelParameters = NzModelParameters());
@@ -77,6 +76,7 @@ class NAZARA_API NzModel : public NzSceneNode, public NzUpdatable
void Unregister() override;
void Update() override;
void UpdateBoundingBox() const;
bool VisibilityTest(const NzFrustumf& frustum) override;
std::vector<NzMaterial*> m_materials;
mutable NzBoundingBoxf m_boundingBox;

View File

@@ -10,10 +10,12 @@
#include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/Color.hpp>
#include <Nazara/Core/Updatable.hpp>
#include <Nazara/Math/Frustum.hpp>
class NzCamera;
class NzLight;
class NzModel;
class NzRenderQueue;
class NzSceneNode;
struct NzSceneImpl;
@@ -45,6 +47,7 @@ class NAZARA_API NzScene
operator const NzSceneNode&() const;
private:
void RecursiveFrustumCull(NzRenderQueue& renderQueue, const NzFrustumf& frustum, NzSceneNode* node);
void SetActiveCamera(const NzCamera* camera);
NzSceneImpl* m_impl;

View File

@@ -31,17 +31,22 @@ class NAZARA_API NzSceneNode : public NzNode
NzScene* GetScene() const;
virtual nzSceneNodeType GetSceneNodeType() const = 0;
virtual bool IsVisible(const NzFrustumf& frustum) const = 0;
bool IsVisible() const;
protected:
virtual void OnParenting(const NzNode* parent) override;
virtual void OnVisibilityChange(bool visibility);
virtual void Register();
void SetScene(NzScene* scene);
virtual bool ShouldUpdateWhenVisible();
virtual void Unregister();
virtual void Update();
virtual bool VisibilityTest(const NzFrustumf& frustum) = 0;
NzScene* m_scene;
bool m_visible;
private:
void UpdateVisibility(const NzFrustumf& frustum);
};
#endif // NAZARA_SCENENODE_HPP

View File

@@ -22,14 +22,13 @@ class NAZARA_API NzSceneRoot : public NzSceneNode
const NzBoundingBoxf& GetBoundingBox() const override;
nzSceneNodeType GetSceneNodeType() const override;
bool IsVisible(const NzFrustumf& frustum) const override;
private:
NzSceneRoot(NzScene* scene);
virtual ~NzSceneRoot();
void Register();
void Unregister();
bool VisibilityTest(const NzFrustumf& frustum) override;
};
#endif // NAZARA_SCENEROOT_HPP