mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-12 15:14:35 +00:00
Engine directory for ticket #1
This commit is contained in:
parent
352279af7a
commit
7dbfe6994d
3795 changed files with 1363358 additions and 0 deletions
320
Engine/source/environment/waterObject.h
Normal file
320
Engine/source/environment/waterObject.h
Normal file
|
|
@ -0,0 +1,320 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// Copyright (c) 2012 GarageGames, LLC
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#ifndef _WATEROBJECT_H_
|
||||
#define _WATEROBJECT_H_
|
||||
|
||||
#ifndef _SCENEOBJECT_H_
|
||||
#include "scene/sceneObject.h"
|
||||
#endif
|
||||
#ifndef _GFXSTRUCTS_H_
|
||||
#include "gfx/gfxStructs.h"
|
||||
#endif
|
||||
#ifndef _FOGSTRUCTS_H_
|
||||
#include "scene/fogStructs.h"
|
||||
#endif
|
||||
#ifndef _GFXSTATEBLOCK_H_
|
||||
#include "gfx/gfxStateBlock.h"
|
||||
#endif
|
||||
#ifndef _REFLECTOR_H_
|
||||
#include "scene/reflector.h"
|
||||
#endif
|
||||
#ifndef _ALIGNEDARRAY_H_
|
||||
#include "core/util/tAlignedArray.h"
|
||||
#endif
|
||||
#ifndef _MATTEXTURETARGET_H_
|
||||
#include "materials/matTextureTarget.h"
|
||||
#endif
|
||||
|
||||
GFXDeclareVertexFormat( GFXWaterVertex )
|
||||
{
|
||||
Point3F point;
|
||||
Point3F normal;
|
||||
GFXVertexColor color;
|
||||
Point2F undulateData;
|
||||
Point4F horizonFactor;
|
||||
};
|
||||
|
||||
|
||||
class MaterialParameterHandle;
|
||||
class BaseMatInstance;
|
||||
class ShaderData;
|
||||
class MatrixSet;
|
||||
|
||||
struct WaterMatParams
|
||||
{
|
||||
MaterialParameterHandle* mRippleMatSC;
|
||||
MaterialParameterHandle* mRippleDirSC;
|
||||
MaterialParameterHandle* mRippleTexScaleSC;
|
||||
MaterialParameterHandle* mRippleSpeedSC;
|
||||
MaterialParameterHandle* mRippleMagnitudeSC;
|
||||
MaterialParameterHandle* mFoamDirSC;
|
||||
MaterialParameterHandle* mFoamTexScaleSC;
|
||||
MaterialParameterHandle* mFoamOpacitySC;
|
||||
MaterialParameterHandle* mFoamSpeedSC;
|
||||
MaterialParameterHandle* mWaveDirSC;
|
||||
MaterialParameterHandle* mWaveDataSC;
|
||||
MaterialParameterHandle* mReflectTexSizeSC;
|
||||
MaterialParameterHandle* mBaseColorSC;
|
||||
MaterialParameterHandle* mMiscParamsSC;
|
||||
MaterialParameterHandle* mReflectParamsSC;
|
||||
MaterialParameterHandle* mReflectNormalSC;
|
||||
MaterialParameterHandle* mHorizonPositionSC;
|
||||
MaterialParameterHandle* mFogParamsSC;
|
||||
MaterialParameterHandle* mMoreFogParamsSC;
|
||||
MaterialParameterHandle* mFarPlaneDistSC;
|
||||
MaterialParameterHandle* mWetnessParamsSC;
|
||||
MaterialParameterHandle* mDistortionParamsSC;
|
||||
MaterialParameterHandle* mUndulateMaxDistSC;
|
||||
MaterialParameterHandle* mAmbientColorSC;
|
||||
MaterialParameterHandle* mLightDirSC;
|
||||
MaterialParameterHandle* mFoamParamsSC;
|
||||
MaterialParameterHandle* mGridElementSizeSC;
|
||||
MaterialParameterHandle* mElapsedTimeSC;
|
||||
MaterialParameterHandle* mModelMatSC;
|
||||
MaterialParameterHandle* mFoamSamplerSC;
|
||||
MaterialParameterHandle* mRippleSamplerSC;
|
||||
MaterialParameterHandle* mCubemapSamplerSC;
|
||||
MaterialParameterHandle* mSpecularParamsSC;
|
||||
MaterialParameterHandle* mDepthGradMaxSC;
|
||||
MaterialParameterHandle* mReflectivitySC;
|
||||
|
||||
void clear();
|
||||
void init(BaseMatInstance* matInst);
|
||||
};
|
||||
|
||||
|
||||
class GFXOcclusionQuery;
|
||||
class PostEffect;
|
||||
class CubemapData;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// WaterObject Class
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
class WaterObject : public SceneObject
|
||||
{
|
||||
typedef SceneObject Parent;
|
||||
|
||||
protected:
|
||||
|
||||
enum MaskBits {
|
||||
UpdateMask = Parent::NextFreeMask << 0,
|
||||
WaveMask = Parent::NextFreeMask << 1,
|
||||
MaterialMask = Parent::NextFreeMask << 2,
|
||||
TextureMask = Parent::NextFreeMask << 3,
|
||||
SoundMask = Parent::NextFreeMask << 4,
|
||||
NextFreeMask = Parent::NextFreeMask << 5
|
||||
};
|
||||
|
||||
enum consts {
|
||||
MAX_WAVES = 3,
|
||||
MAX_FOAM = 2,
|
||||
NUM_ANIM_FRAMES = 32,
|
||||
};
|
||||
|
||||
enum MaterialType
|
||||
{
|
||||
WaterMat = 0,
|
||||
UnderWaterMat,
|
||||
BasicWaterMat,
|
||||
BasicUnderWaterMat,
|
||||
NumMatTypes
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
WaterObject();
|
||||
virtual ~WaterObject();
|
||||
|
||||
DECLARE_CONOBJECT( WaterObject );
|
||||
|
||||
// ConsoleObject
|
||||
static void consoleInit();
|
||||
static void initPersistFields();
|
||||
|
||||
// SimObject
|
||||
virtual bool onAdd();
|
||||
virtual void onRemove();
|
||||
virtual void inspectPostApply();
|
||||
virtual bool processArguments(S32 argc, const char **argv);
|
||||
|
||||
// NetObject
|
||||
virtual U32 packUpdate( NetConnection * conn, U32 mask, BitStream *stream );
|
||||
virtual void unpackUpdate( NetConnection * conn, BitStream *stream );
|
||||
|
||||
// SceneObject
|
||||
virtual void prepRenderImage( SceneRenderState *state );
|
||||
virtual void renderObject( ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat );
|
||||
virtual SFXAmbience* getSoundAmbience() const { return mSoundAmbience; }
|
||||
virtual bool containsPoint( const Point3F& point ) { return isUnderwater( point ); }
|
||||
|
||||
// WaterObject
|
||||
virtual F32 getViscosity() const { return mViscosity; }
|
||||
virtual F32 getDensity() const { return mDensity; }
|
||||
virtual F32 getSurfaceHeight( const Point2F &pos ) const { return 0.0f; };
|
||||
virtual const char* getLiquidType() const { return mLiquidType; }
|
||||
virtual F32 getWaterCoverage( const Box3F &worldBox ) const { return 0.0f; }
|
||||
virtual VectorF getFlow( const Point3F &pos ) const { return Point3F::Zero; }
|
||||
virtual void updateUnderwaterEffect( SceneRenderState *state );
|
||||
virtual bool isUnderwater( const Point3F &pnt ) const { return false; }
|
||||
|
||||
protected:
|
||||
|
||||
virtual void setShaderXForms( BaseMatInstance *mat ) {};
|
||||
virtual void setupVBIB() {};
|
||||
virtual void innerRender( SceneRenderState *state ) {};
|
||||
virtual void setCustomTextures( S32 matIdx, U32 pass, const WaterMatParams ¶mHandles );
|
||||
void drawUnderwaterFilter( SceneRenderState *state );
|
||||
|
||||
virtual void setShaderParams( SceneRenderState *state, BaseMatInstance *mat, const WaterMatParams ¶mHandles );
|
||||
PostEffect* getUnderwaterEffect();
|
||||
|
||||
bool initMaterial( S32 idx );
|
||||
void cleanupMaterials();
|
||||
S32 getMaterialIndex( const Point3F &camPos );
|
||||
|
||||
void initTextures();
|
||||
|
||||
virtual void _getWaterPlane( const Point3F &camPos, PlaneF &outPlane, Point3F &outPos ) {}
|
||||
|
||||
/// Callback used internally when smDisableTrueReflections changes.
|
||||
void _onDisableTrueRelfections();
|
||||
|
||||
protected:
|
||||
|
||||
static bool _setFullReflect( void *object, const char *index, const char *data );
|
||||
static bool _checkDensity(void *object, const char *index, const char *data);
|
||||
|
||||
// WaterObject
|
||||
F32 mViscosity;
|
||||
F32 mDensity;
|
||||
String mLiquidType;
|
||||
F32 mFresnelBias;
|
||||
F32 mFresnelPower;
|
||||
F32 mSpecularPower;
|
||||
ColorF mSpecularColor;
|
||||
bool mEmissive;
|
||||
|
||||
// Reflection
|
||||
bool mFullReflect;
|
||||
PlaneReflector mPlaneReflector;
|
||||
ReflectorDesc mReflectorDesc;
|
||||
PlaneF mWaterPlane;
|
||||
Point3F mWaterPos;
|
||||
bool mReflectNormalUp;
|
||||
F32 mReflectivity;
|
||||
|
||||
// Water Fogging
|
||||
WaterFogData mWaterFogData;
|
||||
|
||||
// Distortion
|
||||
F32 mDistortStartDist;
|
||||
F32 mDistortEndDist;
|
||||
F32 mDistortFullDepth;
|
||||
|
||||
// Ripples
|
||||
Point2F mRippleDir[ MAX_WAVES ];
|
||||
F32 mRippleSpeed[ MAX_WAVES ];
|
||||
Point2F mRippleTexScale[ MAX_WAVES ];
|
||||
F32 mRippleMagnitude[ MAX_WAVES ];
|
||||
|
||||
F32 mOverallRippleMagnitude;
|
||||
|
||||
// Waves
|
||||
Point2F mWaveDir[ MAX_WAVES ];
|
||||
F32 mWaveSpeed[ MAX_WAVES ];
|
||||
F32 mWaveMagnitude[ MAX_WAVES ];
|
||||
|
||||
F32 mOverallWaveMagnitude;
|
||||
|
||||
// Foam
|
||||
Point2F mFoamDir[ MAX_WAVES ];
|
||||
F32 mFoamSpeed[ MAX_WAVES ];
|
||||
Point2F mFoamTexScale[ MAX_WAVES ];
|
||||
F32 mFoamOpacity[ MAX_WAVES ];
|
||||
|
||||
F32 mOverallFoamOpacity;
|
||||
F32 mFoamMaxDepth;
|
||||
F32 mFoamAmbientLerp;
|
||||
F32 mFoamRippleInfluence;
|
||||
|
||||
// Basic Lighting
|
||||
F32 mClarity;
|
||||
ColorI mUnderwaterColor;
|
||||
|
||||
// Misc
|
||||
F32 mDepthGradientMax;
|
||||
|
||||
// Other textures
|
||||
String mRippleTexName;
|
||||
String mFoamTexName;
|
||||
String mCubemapName;
|
||||
String mDepthGradientTexName;
|
||||
|
||||
// Sound
|
||||
SFXAmbience* mSoundAmbience;
|
||||
|
||||
// Not fields...
|
||||
|
||||
/// Defined here and sent to the shader in WaterCommon::setShaderParams
|
||||
/// but needs to be initialized in child classes prior to that call.
|
||||
F32 mUndulateMaxDist;
|
||||
|
||||
/// Defined in WaterCommon but set and used by child classes.
|
||||
/// If true will refuse to render a reflection even if called from
|
||||
/// the ReflectionManager, is set true if occlusion query is enabled and
|
||||
/// it determines it is occluded.
|
||||
//bool mSkipReflectUpdate;
|
||||
|
||||
/// Derived classes can set this value prior to calling Parent::setShaderConst
|
||||
/// to pass it into the shader miscParam.w
|
||||
F32 mMiscParamW;
|
||||
|
||||
SimObjectPtr<PostEffect> mUnderwaterPostFx;
|
||||
|
||||
/// A global for enabling wireframe rendering
|
||||
/// on all water objects.
|
||||
static bool smWireframe;
|
||||
|
||||
/// Force all water objects to use static cubemap reflections
|
||||
static bool smDisableTrueReflections;
|
||||
|
||||
// Rendering
|
||||
bool mBasicLighting;
|
||||
//U32 mRenderUpdateCount;
|
||||
//U32 mReflectUpdateCount;
|
||||
bool mGenerateVB;
|
||||
String mSurfMatName[NumMatTypes];
|
||||
BaseMatInstance* mMatInstances[NumMatTypes];
|
||||
WaterMatParams mMatParamHandles[NumMatTypes];
|
||||
bool mUnderwater;
|
||||
GFXStateBlockRef mUnderwaterSB;
|
||||
GFXTexHandle mRippleTex;
|
||||
GFXTexHandle mDepthGradientTex;
|
||||
GFXTexHandle mFoamTex;
|
||||
CubemapData *mCubemap;
|
||||
MatrixSet *mMatrixSet;
|
||||
NamedTexTarget mNamedDepthGradTex;
|
||||
};
|
||||
|
||||
#endif // _WATEROBJECT_H_
|
||||
Loading…
Add table
Add a link
Reference in a new issue