📄 object3d.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 + -