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

📄 object3d.cpp

📁 空战游戏flacon源码
💻 CPP
字号:
#include "object3d.h"
#include "..\..\..\3Dlib\util.h"
#include "..\..\..\3Dlib\object.h"
#include "..\..\..\3Dlib\hobreadr.h"


//#ifdef	SUPPORT_HOT_FORMAT
//#include "source\datasrc\hotreadr.h"
//#endif

CObject3D::CObject3D ()
{
	ObjectDetail[0].objectData = 0;
	ObjectDetail[0].displayDistance = 10000;
	ObjectDetail[1].displayDistance = 0;
	ObjectType = OBJECT_DATA_UNKNOWN;
	Object.objectDetail = ObjectDetail;
	objectDetailIndex = 0;
	objectSize.x = objectSize.y = objectSize.z = 0.0f;
	objectCenter.x = objectCenter.y = objectCenter.z = 0.0f;
	objectAnimation = 0;
	objectRadius = (GLfloat) 0.0;
}

GLAnimation *CObject3D::GetObjectAnimation ()
{
	return objectAnimation;
}

GLvertex* CObject3D::GetObjectSize ()
{
	return &objectSize;
}

GLvertex* CObject3D::GetObjectCenter ()
{
	return &objectCenter;
}

GLfloat CObject3D::GetObjectRadius ()
{
	return objectRadius;
}

void CObject3D::DeleteObject (GLint detailindex)
{
	glRemoveObjectData ((GLObjectData *) Object.objectDetail[detailindex].objectData);

}

GLint CObject3D::LoadObject (MPRHandle_t hrc, GLbyte *file, GLint detailindex)
{
	GLbyte	ext[10];

	ObjectDetail[0].objectData = 0;
	ObjectDetail[0].displayDistance = 10000;
	ObjectDetail[1].displayDistance = 0;
	Object.objectDetail = ObjectDetail;

	objectDetailIndex = detailindex;
	glGetFileExtension (file, ext);
	ObjectType = OBJECT_DATA_UNKNOWN;
	if (!strnicmp ((const char *) ext, "HOT", 3)) 
		ObjectType = OBJECT_DATA_HOT;
	else if (!strnicmp ((const char *) ext, "HOB", 3)) 
		ObjectType = OBJECT_DATA_HOB;
	else return 0;	// unknown file
	
	switch (ObjectType) {
		case OBJECT_DATA_HOB:
			return ReadHOBData (file);
		case OBJECT_DATA_HOT:
			return ReadHOTData (file);
	}
	return 1;
}

GLint CObject3D::ReadHOBData (GLbyte *filename)
{
	GLbyte			name[MAX_FILENAME_SIZE];
	GLObjectDetail	*detail;

	GetObjectFilename (filename, name);
	detail = &Object.objectDetail[objectDetailIndex];
	detail -> objectData = 0;

	CHOBReader hob;
	GLObjectData *objData = hob.readHOB (name);
	if (!objData) return 0;

	objectRadius = objData -> objectRadius;
	objectSize.x = objData -> objectMax.x - objData -> objectMin.x;
	objectSize.y = objData -> objectMax.y - objData -> objectMin.y;
	objectSize.z = objData -> objectMax.z - objData -> objectMin.z;
	objectCenter.x = (objData -> objectMin.x + objData -> objectMax.x) / 2.0f;
	objectCenter.y = (objData -> objectMin.y + objData -> objectMax.y) / 2.0f;
	objectCenter.z = (objData -> objectMin.z + objData -> objectMax.z) / 2.0f;
	objectAnimation = objData -> objectAnimation;
	
	detail -> detailFlag &= ~255;
	detail -> detailFlag |= GL_OBJECT_HOB_TYPE;
	detail -> objectData = (void *) objData;

	return 1;
}

GLint CObject3D::ReadHOTData (GLbyte *filename)
{
/*
#ifdef	SUPPORT_HOT_FORMAT
	GLbyte			name[MAX_FILENAME_SIZE];
	GLObjectDetail	*detail;

	GetObjectFilename (filename, name);
	detail = &Object.objectDetail[objectDetailIndex];
	detail -> objectData = 0;

	CHOTReader hot;
	GLObjectData *objData = hot.readHOT ((char *) name);
	if (!objData) return 0;

	objectRadius = objData -> objectRadius;
	objectSize.x = objData -> objectMax.x - objData -> objectMin.x;
	objectSize.y = objData -> objectMax.y - objData -> objectMin.y;
	objectSize.z = objData -> objectMax.z - objData -> objectMin.z;
	objectCenter.x = (objData -> objectMin.x + objData -> objectMax.x) / 2.0f;
	objectCenter.y = (objData -> objectMin.y + objData -> objectMax.y) / 2.0f;
	objectCenter.z = (objData -> objectMin.z + objData -> objectMax.z) / 2.0f;
	objectAnimation = objData -> objectAnimation;
	
	detail -> detailFlag &= ~255;
	detail -> detailFlag |= GL_OBJECT_HOT_TYPE;
	detail -> objectData = (void *) objData;

	return 1;
#endif
*/

	return 0;

}

⌨️ 快捷键说明

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