208 lines
9.9 KiB
C++
208 lines
9.9 KiB
C++
// TextureMappingPaletteRecord.h
|
|
|
|
#ifndef __FLT_TEXTURE_MAPPING_PALETTE_RECORD_H
|
|
#define __FLT_TEXTURE_MAPPING_PALETTE_RECORD_H
|
|
|
|
|
|
#include "opcodes.h"
|
|
#include "Record.h"
|
|
#include "RecordVisitor.h"
|
|
|
|
|
|
namespace flt {
|
|
|
|
|
|
struct STextureMapping
|
|
{
|
|
SRecHeader RecHeader;
|
|
float32 reserved; // Reserved
|
|
int32 diIndex; // Texture mapping index
|
|
char szName[20]; // Texture mapping name
|
|
int32 diType; // Texture mapping type
|
|
// 0 = None
|
|
// 1 = Put
|
|
// 2 = 4 Point Put
|
|
// 3 = Reserved
|
|
// 4 = Spherical Project
|
|
// 5 = Radial Project
|
|
// 6 = Reserved
|
|
int32 diWarpFlag; // Warped flag; if TRUE, 8 point warp applied
|
|
float64 dfMat[4][4]; // Transformation matrix (valid only for Types 1 & 2)
|
|
// Variable Variable; // Parameters (see below for parameters for each mapping type)
|
|
};
|
|
|
|
|
|
// Parameters for Put Texture Mapping (Type 1)
|
|
struct SPutTextureMapping
|
|
{
|
|
uint32 dwState; // State of Put Texture tool
|
|
// 0 = Start state - no points entered
|
|
// 1 = One point entered
|
|
// 2 = Two points entered
|
|
// 3 = Three points entered
|
|
int32 active; // Active geometry point
|
|
// 1 = Origin point
|
|
// 2 = Alignment point
|
|
// 3 = Shear point
|
|
float64x3 lower_left; // lower-left corner of bounding box
|
|
float64x3 upper_right; // upper-right corner of bounding box
|
|
int32 sizeFlags[3]; // Use real world size flags for each of the three put points
|
|
float64x3 dfTxtOrigin; // Texture origin point
|
|
float64x3 dfTxtAlignment; // Texture alignment point
|
|
float64x3 dfTxtShear; // Texture shear point
|
|
float64x3 dfGeoOrigin; // Geometry origin point
|
|
float64x3 dfGeoAlignment; // Geometry alignment point
|
|
float64x3 dfGeoShear; // Geometry shear point
|
|
int32 TxtActive; // Active texture point
|
|
// 1 = Origin point
|
|
// 2 = Alignment point
|
|
// 3 = Shear point
|
|
int32 Reserved; // should always be set to 1
|
|
};
|
|
|
|
|
|
//Parameters for 4 Point Put Texture Mapping (Type 2)
|
|
struct SPointPutTextureMapping
|
|
{
|
|
int32 state; // State of Put Texture tool
|
|
// 0 = Start state - no points entered
|
|
// 1 = One point entered
|
|
// 2 = Two points entered
|
|
// 3 = Three points entered
|
|
// 4 = Four points entered
|
|
int32 active; // Active geometry point
|
|
// 1 = Origin point
|
|
// 2 = Alignment point
|
|
// 3 = Shear point
|
|
// 4 = Perspective point
|
|
float64x3 lower_left; // lower-left corner of bounding box
|
|
float64x3 upper_right; // upper-right corner of bounding box
|
|
int32 sizeFlags[4]; // Use real world size flags for each of the four put points
|
|
float64x3 dfTxtOrigin; // Texture origin point
|
|
float64x3 dfTxtAlignment; // Texture alignment point
|
|
float64x3 dfTxtShear; // Texture shear point
|
|
float64x3 dfTxtPerspective; // Texture perspective point
|
|
float64x3 dfGeoOrigin; // Geometry origin point
|
|
float64x3 dfGeoAlignment; // Geometry alignment point
|
|
float64x3 dfGeoShear; // Geometry shear point
|
|
float64x3 dfGeoPerspective; // Geometry perspective point
|
|
|
|
int32 TxtActive; // Active texture point
|
|
// 1 = Origin point
|
|
// 2 = Alignment point
|
|
// 3 = Shear point
|
|
// 4 = Perspective point
|
|
int32 Reserved; // should always be set to 1
|
|
float32 sfScale; // Depth scale factor
|
|
float64 dfMat[4][4]; // Transformation matrix for the 4 point projection plane
|
|
};
|
|
|
|
|
|
// Parameters for Spherical Project Mapping (Type 4)
|
|
struct SSphericalTextureMapping
|
|
{
|
|
float32 sfScale; // Scale
|
|
float64x3 Center; // Center of the projection sphere
|
|
float32 sfMaxScale; // Scale / (maximum dimension of the mapped geometry
|
|
// bounding box)
|
|
float32 sfMaxDimension; // Maximum dimension of the mapped geometry
|
|
// bounding box
|
|
};
|
|
|
|
|
|
// Parameters for Radial Project Mapping (Type 5)
|
|
struct SRadialTextureMapping
|
|
{
|
|
int32 active; // Active geometry point
|
|
// 1 = End point 1 of cylinder center line
|
|
// 2 = End point 2 of cylinder center line
|
|
int32 reserved; // Reserved
|
|
float32 sfRadialScale; // Radial scale
|
|
float32 sfLengthScale; // Scale along length of cylinder
|
|
float64 dfMat[4][4]; // Trackplane to XY plane transformation matrix
|
|
float64x3 endpoint1; // End point 1 of cylinder center line
|
|
float64x3 endpoint2; // End point 2 of cylinder center line
|
|
};
|
|
|
|
// Parameters for Warped Mapping (Warped Flag Set)
|
|
struct SWarpedTextureMapping
|
|
{
|
|
int32 active; // Active geometry point
|
|
// 0 = First warp FROM point
|
|
// 1 = Second warp FROM point
|
|
// 2 =Third warp FROM point
|
|
// 3 = Fourth warp FROM point
|
|
// 4 = Fifth warp FROM point
|
|
// 5 = Sixth warp FROM point
|
|
// 6 = Seventh warp FROM point
|
|
// 7 = Eighth warp FROM point
|
|
// 8 = First warp TO point
|
|
// 9 = Second warp TO point
|
|
// 10 = Third warp TO point
|
|
// 11 = Fourth warp TO point
|
|
// 12 = Fifth warp TO point
|
|
// 13 = Sixth warp TO point
|
|
// 14 = Seventh warp TO point
|
|
// 15 = Eighth warp TO point
|
|
int32 warpState; // Warp tool state
|
|
// 0 = Start state - no points entered
|
|
// 1 = One FROM point entered
|
|
// 2 = Two FROM point entered
|
|
// 3 = Three FROM point entered
|
|
// 4 = Four FROM point entered
|
|
// 5 = Five FROM point entered
|
|
// 6 = Six FROM point entered
|
|
// 7 = Seven FROM point entered
|
|
// 8 = All FROM point entered
|
|
float64 dfMat[4][4]; // Trackplane to XY plane transformation matrix
|
|
/*
|
|
Double 16*2 x, y of the first FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the second FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the third FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the fourth FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the fifth FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the sixth FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the seventh FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the eighth FROM point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the first TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the second TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the third TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the fourth TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the fifth TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the sixth TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the seventh TO point transformed to the XY plane by the above matrix
|
|
Double 16*2 x, y of the eighth TO point transformed to the XY plane by the above matrix
|
|
*/
|
|
};
|
|
|
|
|
|
|
|
class TextureMappingPaletteRecord : public AncillaryRecord
|
|
{
|
|
public:
|
|
|
|
TextureMappingPaletteRecord();
|
|
|
|
virtual Record* clone() const { return new TextureMappingPaletteRecord(); }
|
|
virtual const char* className() const { return "TextureMappingPaletteRecord"; }
|
|
virtual int classOpcode() const { return TEXTURE_MAPPING_PALETTE_OP; }
|
|
virtual size_t sizeofData() const { return sizeof(STextureMapping); }
|
|
virtual void accept(RecordVisitor& rv) { rv.apply(*this); }
|
|
// virtual void traverse(RecordVisitor& rv);
|
|
|
|
protected:
|
|
|
|
virtual ~TextureMappingPaletteRecord();
|
|
|
|
virtual void endian();
|
|
|
|
// virtual bool readLocalData(Input& fr);
|
|
// virtual bool writeLocalData(Output& fw);
|
|
|
|
};
|
|
|
|
|
|
}; // end namespace flt
|
|
|
|
#endif
|