Modified SceneNode::FrustumCull
Now provides an implementation which will test the bounding volume against the frustum (Basic frustum culling) Is now const Disabled face culling on sprites Former-commit-id: 5cb7a94b38ef8b0ffa5a78f16f5ef65a59ab375d
This commit is contained in:
parent
bc9c8c6bdb
commit
a31ced1d76
|
|
@ -53,7 +53,7 @@ class NAZARA_API NzLight : public NzSceneNode
|
||||||
static void Disable(const NzShader* program, const NzLightUniforms& uniforms, int offset = 0);
|
static void Disable(const NzShader* program, const NzLightUniforms& uniforms, int offset = 0);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
bool FrustumCull(const NzFrustumf& frustum) const override;
|
||||||
void InvalidateNode() override;
|
void InvalidateNode() override;
|
||||||
void Register() override;
|
void Register() override;
|
||||||
void Unregister() override;
|
void Unregister() override;
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,6 @@ class NAZARA_API NzModel : public NzSceneNode
|
||||||
NzModel& operator=(NzModel&& node);
|
NzModel& operator=(NzModel&& node);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
|
||||||
void InvalidateNode() override;
|
void InvalidateNode() override;
|
||||||
virtual void UpdateBoundingVolume() const;
|
virtual void UpdateBoundingVolume() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,9 @@ class NAZARA_API NzSceneNode : public NzNode
|
||||||
NzSceneNode& operator=(NzSceneNode&& sceneNode);
|
NzSceneNode& operator=(NzSceneNode&& sceneNode);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
virtual bool FrustumCull(const NzFrustumf& frustum) const;
|
||||||
virtual void OnParenting(const NzNode* parent) override;
|
virtual void OnParenting(const NzNode* parent) override;
|
||||||
virtual void OnVisibilityChange(bool visibility);
|
virtual void OnVisibilityChange(bool visibility);
|
||||||
virtual bool FrustumCull(const NzFrustumf& frustum) = 0;
|
|
||||||
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
void RecursiveSetScene(NzScene* scene, NzNode* node);
|
||||||
virtual void Register();
|
virtual void Register();
|
||||||
void SetScene(NzScene* scene);
|
void SetScene(NzScene* scene);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ class NAZARA_API NzSceneRoot : public NzSceneNode
|
||||||
NzSceneRoot(NzScene* scene);
|
NzSceneRoot(NzScene* scene);
|
||||||
virtual ~NzSceneRoot();
|
virtual ~NzSceneRoot();
|
||||||
|
|
||||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
|
||||||
void Register();
|
void Register();
|
||||||
void Unregister();
|
void Unregister();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||||
void SetTextureRect(const NzRectui& rect);
|
void SetTextureRect(const NzRectui& rect);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
|
||||||
void InvalidateNode() override;
|
void InvalidateNode() override;
|
||||||
void Register() override;
|
void Register() override;
|
||||||
void Unregister() override;
|
void Unregister() override;
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,7 @@ void NzLight::Disable(const NzShader* shader, const NzLightUniforms& uniforms, i
|
||||||
shader->SendInteger(uniforms.locations.type + offset, -1);
|
shader->SendInteger(uniforms.locations.type + offset, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzLight::FrustumCull(const NzFrustumf& frustum)
|
bool NzLight::FrustumCull(const NzFrustumf& frustum) const
|
||||||
{
|
{
|
||||||
switch (m_type)
|
switch (m_type)
|
||||||
{
|
{
|
||||||
|
|
@ -244,10 +244,7 @@ bool NzLight::FrustumCull(const NzFrustumf& frustum)
|
||||||
return frustum.Contains(NzSpheref(m_derivedPosition, m_radius));
|
return frustum.Contains(NzSpheref(m_derivedPosition, m_radius));
|
||||||
|
|
||||||
case nzLightType_Spot:
|
case nzLightType_Spot:
|
||||||
if (!m_boundingVolumeUpdated)
|
return NzSceneNode::FrustumCull(frustum);
|
||||||
UpdateBoundingVolume();
|
|
||||||
|
|
||||||
return frustum.Contains(m_boundingVolume);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NazaraError("Invalid light type (0x" + NzString::Number(m_type, 16) + ')');
|
NazaraError("Invalid light type (0x" + NzString::Number(m_type, 16) + ')');
|
||||||
|
|
|
||||||
|
|
@ -438,14 +438,6 @@ NzModel& NzModel::operator=(NzModel&& node)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzModel::FrustumCull(const NzFrustumf& frustum)
|
|
||||||
{
|
|
||||||
if (!m_boundingVolumeUpdated)
|
|
||||||
UpdateBoundingVolume();
|
|
||||||
|
|
||||||
return frustum.Contains(m_boundingVolume);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzModel::InvalidateNode()
|
void NzModel::InvalidateNode()
|
||||||
{
|
{
|
||||||
NzSceneNode::InvalidateNode();
|
NzSceneNode::InvalidateNode();
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,11 @@ NzSceneNode& NzSceneNode::operator=(NzSceneNode&& sceneNode)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NzSceneNode::FrustumCull(const NzFrustumf& frustum) const
|
||||||
|
{
|
||||||
|
return frustum.Contains(GetBoundingVolume());
|
||||||
|
}
|
||||||
|
|
||||||
void NzSceneNode::OnParenting(const NzNode* parent)
|
void NzSceneNode::OnParenting(const NzNode* parent)
|
||||||
{
|
{
|
||||||
if (parent)
|
if (parent)
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,6 @@ bool NzSceneRoot::IsDrawable() const
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzSceneRoot::FrustumCull(const NzFrustumf& frustum)
|
|
||||||
{
|
|
||||||
NazaraUnused(frustum);
|
|
||||||
|
|
||||||
return true; // Toujours visible
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzSceneRoot::Register()
|
void NzSceneRoot::Register()
|
||||||
{
|
{
|
||||||
NazaraInternalError("SceneNode::Register() called on SceneRoot");
|
NazaraInternalError("SceneNode::Register() called on SceneRoot");
|
||||||
|
|
|
||||||
|
|
@ -116,10 +116,11 @@ void NzSprite::SetSize(const NzVector2f& size)
|
||||||
void NzSprite::SetTexture(NzTexture* texture, bool resizeSprite)
|
void NzSprite::SetTexture(NzTexture* texture, bool resizeSprite)
|
||||||
{
|
{
|
||||||
std::unique_ptr<NzMaterial> material(new NzMaterial);
|
std::unique_ptr<NzMaterial> material(new NzMaterial);
|
||||||
material->Enable(nzRendererParameter_DepthBuffer, false);
|
material->SetPersistent(false);
|
||||||
|
|
||||||
|
material->Enable(nzRendererParameter_FaceCulling, false);
|
||||||
material->EnableLighting(false);
|
material->EnableLighting(false);
|
||||||
material->SetDiffuseMap(texture);
|
material->SetDiffuseMap(texture);
|
||||||
material->SetPersistent(false);
|
|
||||||
|
|
||||||
SetMaterial(material.get(), resizeSprite);
|
SetMaterial(material.get(), resizeSprite);
|
||||||
material.release();
|
material.release();
|
||||||
|
|
@ -154,14 +155,6 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
|
||||||
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
|
SetTextureCoords(NzRectf(invWidth*rect.x, invHeight*rect.y, invWidth*rect.width, invHeight*rect.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzSprite::FrustumCull(const NzFrustumf& frustum)
|
|
||||||
{
|
|
||||||
if (!m_boundingVolumeUpdated)
|
|
||||||
UpdateBoundingVolume();
|
|
||||||
|
|
||||||
return frustum.Contains(m_boundingVolume);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NzSprite::InvalidateNode()
|
void NzSprite::InvalidateNode()
|
||||||
{
|
{
|
||||||
NzSceneNode::InvalidateNode();
|
NzSceneNode::InvalidateNode();
|
||||||
|
|
@ -180,7 +173,7 @@ void NzSprite::Unregister()
|
||||||
void NzSprite::UpdateBoundingVolume() const
|
void NzSprite::UpdateBoundingVolume() const
|
||||||
{
|
{
|
||||||
if (m_boundingVolume.IsNull())
|
if (m_boundingVolume.IsNull())
|
||||||
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0, m_size.x, m_size.y, 0.f);
|
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0.f, m_size.x, m_size.y, 0.f);
|
||||||
|
|
||||||
if (!m_transformMatrixUpdated)
|
if (!m_transformMatrixUpdated)
|
||||||
UpdateTransformMatrix();
|
UpdateTransformMatrix();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue