⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t3dlib8.h

📁 3D游戏编程大师技巧第十章的源代码
💻 H
字号:
// T3DLIB8.H - header file for T3DLIB8.H

// watch for multiple inclusions
#ifndef T3DLIB8
#define T3DLIB8

// DEFINES //////////////////////////////////////////////////////////////////

// general clipping flags for polygons
#define CLIP_POLY_X_PLANE           0x0001 // cull on the x clipping planes
#define CLIP_POLY_Y_PLANE           0x0002 // cull on the y clipping planes
#define CLIP_POLY_Z_PLANE           0x0004 // cull on the z clipping planes
#define CLIP_OBJECT_XYZ_PLANES      (CULL_OBJECT_X_PLANE | CULL_OBJECT_Y_PLANE | CULL_OBJECT_Z_PLANE)

// defines for light types version 2.0
#define LIGHTV2_ATTR_AMBIENT      0x0001    // basic ambient light
#define LIGHTV2_ATTR_INFINITE     0x0002    // infinite light source
#define LIGHTV2_ATTR_DIRECTIONAL  0x0002    // infinite light source (alias)
#define LIGHTV2_ATTR_POINT        0x0004    // point light source
#define LIGHTV2_ATTR_SPOTLIGHT1   0x0008    // spotlight type 1 (simple)
#define LIGHTV2_ATTR_SPOTLIGHT2   0x0010    // spotlight type 2 (complex)

#define LIGHTV2_STATE_ON          1         // light on
#define LIGHTV2_STATE_OFF         0         // light off


// transformation control flags
#define TRANSFORM_COPY_LOCAL_TO_TRANS   3 // copy data as is, no transform

// TYPES ///////////////////////////////////////////////////////////////////

// version 2.0 of light structure
typedef struct LIGHTV2_TYP
{
int state; // state of light
int id;    // id of light
int attr;  // type of light, and extra qualifiers

RGBAV1 c_ambient;   // ambient light intensity
RGBAV1 c_diffuse;   // diffuse light intensity
RGBAV1 c_specular;  // specular light intensity

POINT4D  pos;       // position of light world/transformed
POINT4D  tpos;
VECTOR4D dir;       // direction of light world/transformed
VECTOR4D tdir;
float kc, kl, kq;   // attenuation factors
float spot_inner;   // inner angle for spot light
float spot_outer;   // outer angle for spot light
float pf;           // power factor/falloff for spot lights

int   iaux1, iaux2; // auxiliary vars for future expansion
float faux1, faux2;
void *ptr;

} LIGHTV2, *LIGHTV2_PTR;


// CLASSES /////////////////////////////////////////////////////////////////


// MACROS ///////////////////////////////////////////////////////////////////



// TYPES ///////////////////////////////////////////////////////////////////

// EXTERNALS ///////////////////////////////////////////////////////////////

extern LIGHTV2 lights2[MAX_LIGHTS];  // lights in system

// PROTOTYPES //////////////////////////////////////////////////////////////

void Clip_Polys_RENDERLIST4DV2(RENDERLIST4DV2_PTR rend_list, CAM4DV1_PTR cam, int clip_flags);

int Generate_Terrain_OBJECT4DV2(OBJECT4DV2_PTR obj,     // pointer to object
                                float twidth,            // width in world coords on x-axis
                                float theight,           // height (length) in world coords on z-axis
                                float vscale,           // vertical scale of terrain
                                char *height_map_file,  // filename of height bitmap encoded in 256 colors
                                char *texture_map_file, // filename of texture map
                                int rgbcolor,           // color of terrain if no texture        
                                VECTOR4D_PTR pos,       // initial position
                                VECTOR4D_PTR rot,       // initial rotations
                                int poly_attr);         // the shading attributes we would like


int Light_OBJECT4DV2_World2_16(OBJECT4DV2_PTR obj,  // object to process
                             CAM4DV1_PTR cam,     // camera position
                             LIGHTV2_PTR lights,  // light list (might have more than one)
                             int max_lights);     // maximum lights in list


int Light_OBJECT4DV2_World2(OBJECT4DV2_PTR obj,  // object to process
                           CAM4DV1_PTR cam,     // camera position
                           LIGHTV2_PTR lights,  // light list (might have more than one)
                           int max_lights);      // maximum lights in list

int Light_RENDERLIST4DV2_World2(RENDERLIST4DV2_PTR rend_list,  // list to process
                                 CAM4DV1_PTR cam,     // camera position
                                 LIGHTV2_PTR lights,  // light list (might have more than one)
                                 int max_lights);     // maximum lights in list


int Light_RENDERLIST4DV2_World2_16(RENDERLIST4DV2_PTR rend_list,  // list to process
                                 CAM4DV1_PTR cam,     // camera position
                                 LIGHTV2_PTR lights,  // light list (might have more than one)
                                 int max_lights);     // maximum lights in list


// lighting system
int Init_Light_LIGHTV2(LIGHTV2_PTR lights,       // light array to work with (new)
                       int           index,      // index of light to create (0..MAX_LIGHTS-1)
                       int          _state,      // state of light
                       int          _attr,       // type of light, and extra qualifiers
                       RGBAV1       _c_ambient,  // ambient light intensity
                       RGBAV1       _c_diffuse,  // diffuse light intensity
                       RGBAV1       _c_specular, // specular light intensity
                       POINT4D_PTR  _pos,        // position of light
                       VECTOR4D_PTR _dir,        // direction of light
                       float        _kc,         // attenuation factors
                       float        _kl, 
                       float        _kq, 
                       float        _spot_inner, // inner angle for spot light
                       float        _spot_outer, // outer angle for spot light
                       float        _pf);        // power factor/falloff for spot lights

int Reset_Lights_LIGHTV2(LIGHTV2_PTR lights,       // light array to work with (new)
                         int max_lights);          // number of lights in system


void Transform_LIGHTSV2(LIGHTV2_PTR lights,  // array of lights to transform
                        int num_lights,      // number of lights to transform
                        MATRIX4X4_PTR mt,    // transformation matrix
                        int coord_select);   // selects coords to transform

#endif
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -