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

📄 gbsplib.h

📁 3D游戏场景编辑器
💻 H
字号:
/****************************************************************************************/
/*  GbspLib.h                                                                           */
/*                                                                                      */
/*  Author:       John Pollard                                                          */
/*  Description:  Genesis world editor header file                                      */
/*                                                                                      */
/*  The contents of this file are subject to the Genesis3D Public License               */
/*  Version 1.01 (the "License"); you may not use this file except in                   */
/*  compliance with the License. You may obtain a copy of the License at                */
/*  http://www.genesis3d.com                                                            */
/*                                                                                      */
/*  Software distributed under the License is distributed on an "AS IS"                 */
/*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
/*  the License for the specific language governing rights and limitations              */
/*  under the License.                                                                  */
/*                                                                                      */
/*  The Original Code is Genesis3D, released March 25, 1999.                            */
/*  Genesis3D Version 1.1 released November 15, 1999                                 */
/*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
/*                                                                                      */
/*  Prepared for GenEdit-Classic ver. 0.5, Dec. 15, 2000								*/
/****************************************************************************************/
#ifndef GBSPLIB_H
#define GBSPLIB_H

#include <Windows.h>
#include "vec3d.h"
#include "basetype.h"

//#include "MyDef.h"
//#include "MathLib.h"

//#include "Motion.h"

#define GBSP_VERSION_MAJOR	6
#define GBSP_VERSION_MINOR	0
/*
//====================================================================================
//	Global defines
//====================================================================================
#define PLANENUM_LEAF		-1
#define TEXINFO_NODE		-1


#define MAX_BSP_PLANES		32000

#define	DIST_EPSILON	(VecType)0.01
#define	ANGLE_EPSILON	(VecType)0.00001

//====================================================================================
//	BSP sructures
//====================================================================================

struct _GBSP_Portal;

typedef struct GBSP_Brush2	GBSP_Brush2;
typedef struct GBSP_Side	GBSP_Side;

typedef struct
{
	S32			NumVerts;
	Vec3d		*Verts;
} GBSP_Poly;


typedef struct _GBSP_Face
{
	_GBSP_Face	*Next;
	_GBSP_Face	*Original;
	GBSP_Poly	*Poly;
	S32			Contents[2];
	S32			TexInfo;
	S32			PlaneNum;
	S32			PlaneSide;

	S32			Entity;					// Originating entity

	U8			Detail;					// 1 if was on detail brush
	U8			Hint;
	U8			Visible;			

	// For GFX file saving
	S32			OutputNum;	

	S32			*IndexVerts;
	S32			FirstIndexVert;
	S32			NumIndexVerts;

	_GBSP_Portal *Portal;
	_GBSP_Face	*Split[2];
	_GBSP_Face	*Merged;
} GBSP_Face;

typedef struct
{
	Vec3d		Normal;
	VecType		Dist;
	S32			Type;
} GBSP_Plane;

typedef struct
{
	S32		Contents;					// Contents of leaf
} GBSP_Leaf;

typedef struct _GBSP_Node
{
	// Info for this node as a node or leaf
	S32				PlaneNum;			// -1 if a leaf
	S32				PlaneSide;			// CHANGE1!!!
	S32				Contents;			// Contents node/leaf
	GBSP_Face		*Faces;				// Faces on this node
	_GBSP_Node		*Children[2];		// Front and back child
	_GBSP_Node		*Parent;			// Parent of this node
	Vec3d			Mins;				// Current BBox of node
	Vec3d			Maxs;

	// Info for this node as a leaf
	_GBSP_Portal	*Portals;			// Portals on this leaf
	S32				NumMarkFaces;		// Number of faces touching this leaf
	GBSP_Face		**MarkFaces;		// Pointer to Faces touching this leaf
	S32				CurrentFill;		// For the outside filling stage
	S32				Entity;				// 1 if entity touching leaf
	S32				Occupied;			// FIXME:  Can use Entity!!!
	S32				PortalLeafNum;		// For portal saving

	BOOL			Detail;
	S32				Cluster;
	S32				Area;				// Area number, -1 if area portal, 0 if solid

	GBSP_Brush2		*Volume;
	GBSP_Side		*Side;
	GBSP_Brush2		*BrushList;

	// For GFX file saving
	S32				ChildrenID[2];
	S32				FirstFace;
	S32				NumFaces;
	S32				FirstPortal;
	S32				NumPortals;

	S32				FirstSide;			// For bevel bbox clipping
	S32				NumSides;

} GBSP_Node;

typedef struct
{
	S32		PlaneNum;
	S32		PlaneSide;
} GBSP_LeafSide;

typedef struct _GBSP_Node2
{
	_GBSP_Node2		*Children[2];
	S32				PlaneNum;			// -1 == Leaf
	
	// For leafs
	S32				Contents;
} GBSP_Node2;

// Side flags...
#define SIDE_HINT	(1<<0)

typedef struct GBSP_Side
{
	GBSP_Poly	*Poly;

	S32			PlaneNum;
	U8			PlaneSide;

	S32			TexInfo;

	U8			Flags;

	U8			Visible;
	U8			Tested;
	//U8			Bevel;

} GBSP_Side;

typedef struct _GBSP_Portal
{
	GBSP_Poly		*Poly;				// Convex poly that holds the shape of the portal
	GBSP_Node		*Nodes[2];			// Node on each side of the portal
	_GBSP_Portal	*Next[2];			// Next portal for each node
	S32				PlaneNum;

	GBSP_Node		*OnNode;
	GBSP_Face		*Face[2];
	GBSP_Side		*Side;
	U8				SideFound;
} GBSP_Portal;

typedef struct MAP_Brush2	MAP_Brush2;

typedef struct GBSP_Brush2
{
	GBSP_Brush2	*Next;
	Vec3d		Mins, Maxs;
	S32			Side, TestSide;		// Side of node during construction
	MAP_Brush2	*Original;
	S32			NumSides;
	GBSP_Side	Sides[6];			// Variably sized

} GBSP_Brush2;

typedef struct
{
	GBSP_Node	*RootNode[2];		// 0 = DrawHull, 1 = Bevel ClipHull

	Vec3d		Origin;

	GBSP_Node	OutsideNode;		// So each model can have it's own outside node

	S32			TempAreas[5];		// Areas that model touches
	S32			NumTempAreas;
	// For GFX File saving
	S32			RootNodeID[2];
	S32			FirstFace;
	S32			NumFaces;
	S32			FirstLeaf;
	S32			NumLeafs;
	S32			FirstCluster;
	S32			NumClusters;
	S32			FirstArea;
	S32			NumAreas;
	S32			NumSolidLeafs;		// So we can skip over solid leafs for vis stuff

} GBSP_Model;
*/
//====================================================================================
//	Main driver interfaces
//====================================================================================
#define DllImport	extern "C" __declspec( dllimport )
#define DllExport	extern "C" __declspec( dllexport )

typedef void ERROR_CB(char *String, ...);
typedef void PRINTF_CB(char *String, ...);

typedef struct
{
	BOOL	Verbose;
	BOOL	EntityVerbose;

} BspParms;

typedef struct
{
	BOOL	Verbose;
	BOOL	ExtraSamples;
	float	LightScale;
	BOOL	Radiosity;
	int		NumBounce;
	float	PatchSize;
	BOOL	FastPatch;
	float	ReflectiveScale;

	geVec3d	MinLight;			// R,G,B (XYZ) min color for each faces lightmap

} LightParms;

typedef struct
{
	BOOL	Verbose;
	BOOL	FullVis;
	BOOL	SortPortals;

} VisParms;

extern BOOL		CancelRequest;		// Global cancel request...

typedef enum
{
	GBSP_ERROR,
	GBSP_OK,
	GBSP_CANCEL
} GBSP_RETVAL;

typedef GBSP_RETVAL GBSP_CREATE_BSP(char *MapText, BspParms *Parms);
typedef GBSP_RETVAL GBSP_S_FILE(char *FileName);
typedef void GBSP_FREE_BSP(void);
typedef GBSP_RETVAL GBSP_VIS_FILE(char *FileName, VisParms *Parms);
typedef GBSP_RETVAL GBSP_LIGHT_FILE(char *FileName, LightParms *Parms);
typedef BOOL GBSP_CANCEL_COMPILE(void);
typedef BOOL GBSP_UPDATE_ENTITIES(char *MapName, char *BSPName);

typedef struct
{
	ERROR_CB		*Error;			// This must be set by caller
	PRINTF_CB		*Printf;		// This too

} GBSP_Hook;

typedef struct
{
	int						VersionMajor;			// Major changes, like function parms...
	int						VersionMinor;			// Internal changes, that do not effect caller
	GBSP_CREATE_BSP			*GBSP_CreateBSP;
	GBSP_S_FILE				*GBSP_SaveGBSPFile;
	GBSP_FREE_BSP			*GBSP_FreeBSP;
	GBSP_VIS_FILE			*GBSP_VisGBSPFile;
	GBSP_LIGHT_FILE			*GBSP_LightGBSPFile;
	GBSP_CANCEL_COMPILE		*GBSP_Cancel;
	GBSP_UPDATE_ENTITIES	*GBSP_UpdateEntities;
} GBSP_FuncHook;

typedef GBSP_FuncHook *GBSP_INIT(GBSP_Hook *Hook);

#endif


⌨️ 快捷键说明

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