93 lines
3.5 KiB
C++
Executable File
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
|