mirror of https://github.com/OpenMW/openmw.git
Handle NiFogProperty (feature #5173)
parent
102d2c4b43
commit
9cdaf2c29b
@ -0,0 +1,31 @@
|
||||
#include "fog.hpp"
|
||||
|
||||
#include <osg/Matrix>
|
||||
#include <osg/State>
|
||||
|
||||
namespace NifOsg
|
||||
{
|
||||
|
||||
Fog::Fog()
|
||||
: osg::Fog()
|
||||
{
|
||||
}
|
||||
|
||||
Fog::Fog(const Fog& copy, const osg::CopyOp& copyop)
|
||||
: osg::Fog(copy, copyop)
|
||||
, mDepth(copy.mDepth)
|
||||
{
|
||||
}
|
||||
|
||||
void Fog::apply(osg::State& state) const
|
||||
{
|
||||
osg::Fog::apply(state);
|
||||
#ifdef OSG_GL_FIXED_FUNCTION_AVAILABLE
|
||||
float fov, aspect, near, far;
|
||||
state.getProjectionMatrix().getPerspective(fov, aspect, near, far);
|
||||
glFogf(GL_FOG_START, near * mDepth + far * (1.f - mDepth));
|
||||
glFogf(GL_FOG_END, far);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
#ifndef OPENMW_COMPONENTS_NIFOSG_FOG_H
|
||||
#define OPENMW_COMPONENTS_NIFOSG_FOG_H
|
||||
|
||||
#include <osg/Fog>
|
||||
|
||||
namespace NifOsg
|
||||
{
|
||||
|
||||
// osg::Fog-based wrapper for NiFogProperty that autocalculates the fog start and end distance.
|
||||
class Fog : public osg::Fog
|
||||
{
|
||||
public:
|
||||
Fog();
|
||||
Fog(const Fog& copy, const osg::CopyOp& copyop);
|
||||
|
||||
META_StateAttribute(NifOsg, Fog, FOG)
|
||||
|
||||
void setDepth(float depth) { mDepth = depth; }
|
||||
float getDepth() const { return mDepth; }
|
||||
|
||||
void apply(osg::State& state) const override;
|
||||
|
||||
private:
|
||||
float mDepth{ 1.f };
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue