tge/lib/maxsdk70/include/IProjection_WorkingModelInfo.h
2017-04-17 06:17:10 -06:00

93 lines
3.5 KiB
C++
Executable File

/*==============================================================================
file: IProjection_WorkingModelInfo.h
author: Daniel Levesque
created: 19 May 2004
description:
Definition of an interface that gives access to basic shade context information
on the working model of a bake projection.
This interface is to be used along with the bake projection feature, which
allows using high-res objects when baking maps for low-res objects.
modified:
© 2004 Autodesk
==============================================================================*/
#ifndef _IPROJECTION_WORKINGMODELINFO_H_
#define _IPROJECTION_WORKINGMODELINFO_H_
#include <BaseInterface.h>
class RenderInstance;
class Point3;
//==============================================================================
// class IProjection_WorkingModelInfo
//
// This interface provides access to some shade context information for the
// working model.
//
// When a bake projection is done, all the information in the shade context
// is overriden to represent the intersection point on the projected object.
// If a bake render element still needs access to shade context information
// from the original object (the working model), then this interface may be used.
//
// This interface should be queried from the shade context through GetInterface().
// A NULL pointer will be returned if no projection was done.
//==============================================================================
class IProjection_WorkingModelInfo : public BaseInterface {
public:
// Query this interface on a shade context
static IProjection_WorkingModelInfo* GetInterface(ShadeContext& shadeContext);
// Returns the render instance of the working model
virtual RenderInstance* GetRenderInstance() = 0;
// Returns the face number of that hit face
virtual int GetFaceNumber() = 0;
// Returns the original interpolated normal
virtual const Point3& GetOrigNormal() = 0;
// Returns the barycentric coordinates of the hit point
virtual void GetBarycentricCoords(Point3& bary) = 0;
virtual void GetBarycentricCoords(float& b0, float& b1, float& b2) = 0;
// Returns whether the backface was hit
virtual BOOL GetBackFace() = 0;
// Returns the point that was hit, in camera space
virtual const Point3& GetPoint() = 0;
// Get the view direction, in camera space (equivalent to SContext::V())
virtual const Point3& GetViewDir() = 0;
// Get the original view direction, in camera space (equivalent to SContext::OrigView())
virtual const Point3& GetOriginalViewDir() = 0;
// Get the material number of the hit face
virtual int GetMaterialNumber() = 0;
// Get the bump basis vectors of the hit face (equivalent to SContext::BumpBasisVectors())
virtual void BumpBasisVectors(Point3 dP[2], int axis, int channel) = 0;
// Get the map basis vectors (aks bump basis vectors) interpolated at the current position
virtual void TangentBasisVectors(Point3 dP[2], int mapChannel) = 0;
// -- from BaseInterface
virtual Interface_ID GetID();
};
#define IPROJECTION_WORKINGMODELINFO_INTERFACE_ID Interface_ID(0x79907259, 0xbf05948)
inline IProjection_WorkingModelInfo* IProjection_WorkingModelInfo::GetInterface(ShadeContext& shadeContext) {
return static_cast<IProjection_WorkingModelInfo*>(shadeContext.GetInterface(IPROJECTION_WORKINGMODELINFO_INTERFACE_ID));
}
inline Interface_ID IProjection_WorkingModelInfo::GetID() {
return IPROJECTION_WORKINGMODELINFO_INTERFACE_ID;
}
#endif