added everything
This commit is contained in:
103
lib/maxsdk70/include/radiosityMesh.h
Executable file
103
lib/maxsdk70/include/radiosityMesh.h
Executable file
@@ -0,0 +1,103 @@
|
||||
/**********************************************************************
|
||||
*<
|
||||
FILE: RadiostiyMesh.h
|
||||
|
||||
DESCRIPTION: Exposes the radiosity meshes for use by other clients.
|
||||
|
||||
CREATED BY: Cleve Ard, Discreet Development
|
||||
|
||||
HISTORY: 8/6/02
|
||||
|
||||
*> Copyright (c) 2002, All Rights Reserved.
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __INCLUDE_RADIOSITYMESH_H__
|
||||
#define __INCLUDE_RADIOSITYMESH_H__
|
||||
|
||||
#include <radiosity.h>
|
||||
#include <iFnPub.h>
|
||||
|
||||
#define RADIOSITY_MESH_INTERFACE_ID Interface_ID(0x3b004730, 0x7957272c)
|
||||
|
||||
class RenderGlobalContext;
|
||||
class Matrix3;
|
||||
|
||||
class RadiosityMesh : public FPMixinInterface {
|
||||
public:
|
||||
|
||||
// Does the solution exist. The solution doesn't exist until we
|
||||
// have actually tried to solve it. CreateMeshes below will
|
||||
// create the meshes and the can be retrieved, but they won't
|
||||
// have any useful lighting data in them.
|
||||
virtual bool DoesSolutionExist() = 0;
|
||||
|
||||
// Determine whether the radiosity plugin has a mesh for the INode node.
|
||||
virtual bool DoesMeshExist(INode* node) = 0;
|
||||
|
||||
// Determine whether the radiosity plugin thinks its mesh for the
|
||||
// INode node is valid at time t.
|
||||
//
|
||||
// If rendering is true, a mesh will be considered invalid, if the
|
||||
// number of faces in it is too large compared to the number of faces
|
||||
// in the original object. Too large is defined by the ratio of the number
|
||||
// of faces in the radiosity mesh and the number of faces in the original
|
||||
// object. If this ratio is bigger than 1.5 then the radiosity mesh is
|
||||
// too large. This ratio is can be controlled by a setting in
|
||||
// plugcfg/DiscreetRadiosity.ini:
|
||||
//
|
||||
// [Radiosity]
|
||||
// ShareMeshes=1.5
|
||||
virtual bool IsMeshValid(TimeValue t, INode* node, bool rendering) = 0;
|
||||
|
||||
// Get the Validity for the mesh. If the radiosity plugin cannot
|
||||
// determine the validity at time t, it returns the NEVER.
|
||||
virtual ::Interval GetValidity(TimeValue t, INode* node) = 0;
|
||||
|
||||
// Create the meshes. This can be called to force the radiosity
|
||||
// plugin to update its meshes at time t. Once the meshes are
|
||||
// updated, they will not be deleted when radiosity is solved;
|
||||
// the light is added to the existing mesh. This method is used
|
||||
// by the renderer to create the meshes before the radiosity
|
||||
// solution is calculated.
|
||||
virtual bool CreateMeshes(TimeValue t, RenderGlobalContext* rgc) = 0;
|
||||
|
||||
// Get the mesh for a node. Returns true if the mesh exists.
|
||||
// Also restricts validity to the validity interval for the mesh.
|
||||
// If the mesh doesn't exist, the validity is not changed.
|
||||
// The address of the mesh is returned in mesh. You shouldn't
|
||||
// keep this address for an extended period. The mesh could
|
||||
// be deleted when the radiosity solution calculates a new
|
||||
// solution. There is no instancing for meshes in the radiosity
|
||||
// solution. Each instance in MAX is assigned a unique mesh
|
||||
// in the solution.
|
||||
virtual bool GetMesh(INode* node, Mesh*& mesh,
|
||||
::Interval& validity = ::Interval(0,0)) = 0;
|
||||
|
||||
// Get the TM for the node. Returns true if the mesh exists.
|
||||
// Also restricts validity to the validity interval for the TM.
|
||||
// If the mesh doesn't exist, the validity is not changed.
|
||||
// TM is the mesh to world space transform. The radiosity
|
||||
// solution does not keep track of object to world transforms.
|
||||
// The transform returned is usually just a scale to translate
|
||||
// the radiosity plugins units, meters, to the MAX units.
|
||||
virtual bool GetMeshTM(INode* node, Matrix3& TM,
|
||||
::Interval& validity = ::Interval(0,0)) = 0;
|
||||
|
||||
// Get the mesh and TM for a node. Returns NULL if the mesh doesn't
|
||||
// exist. TM is the mesh to world space transform (See GetMeshTM).
|
||||
// Also restricts meshValid to the validity interval for the mesh,
|
||||
// and tmValid to the validity interval for the TM. If the mesh
|
||||
// doesn't exist, neither validity interval is changed.
|
||||
virtual Mesh* GetMeshAndTM(INode* node, Matrix3& TM,
|
||||
::Interval& meshValid = ::Interval(0,0),
|
||||
::Interval& tmValid = ::Interval(0,0)) = 0;
|
||||
};
|
||||
|
||||
|
||||
inline RadiosityMesh* GetRadiosityMesh(RadiosityEffect* rad)
|
||||
{
|
||||
return static_cast<RadiosityMesh*>(rad->GetInterface(
|
||||
RADIOSITY_MESH_INTERFACE_ID));
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user