資源簡介
opengl寫的,導(dǎo)入3DS路燈,有燈光光韻效果,很真實,很漂亮。

代碼片段和文件信息
#include?“3ds.h“
#include?“Texture.h“
//?構(gòu)造函數(shù)
C3DSModel::C3DSModel()
{
//?初始化文件指針
m_FilePtr?=?NULL;
//?定義一個默認(rèn)的材質(zhì)(灰色)
tMaterial?defaultMat;
defaultMat.isTexMat?=?false;
strcpy(defaultMat.matName.string?“5DG_Default“);
defaultMat.color[0]?=?192;
defaultMat.color[1]?=?192;
defaultMat.color[2]?=?192;
m_3DModel.pMaterials.push_back(defaultMat);
//?初始化保存3DS模型的結(jié)構(gòu)體
m_3DModel.numOfMaterials?=?1;
m_3DModel.numOfobjects?=?0;
}
//?析構(gòu)函數(shù)
C3DSModel::~C3DSModel()
{
m_3DModel.pMaterials.clear();
m_3DModel.pobject.clear();
}
//?載入3ds文件
BOOL?C3DSModel::Load(char?*strFileName)
{
char?strMessage[128]?=?{0};
tChunk?chunk?=?{0};
//?打開文件
m_FilePtr?=?fopen(strFileName“rb“);
//?如果文件打開失敗
if?(!m_FilePtr)
{
sprintf(strMessage?“3DS文件?%s?不存在!“?strFileName);
MessageBox(NULL?strMessage?“Error“?MB_OK);
return?false;
}
//?讀取3ds文件的第一個Chunk
ReadChunk(&chunk);
//?檢查是否是3ds文件
if?(chunk.ID?!=?PRIMARY)
{
sprintf(strMessage?“讀取文件?%s?失敗!“?strFileName);
MessageBox(NULL?strMessage?“Error“?MB_OK);
fclose(m_FilePtr);
return?false;
}
//?開始讀取3ds文件
ReadPrimary(chunk.length-6);
//?計算每個頂點的法線量
ComputeNormals();
//?關(guān)閉打開的文件
fclose(m_FilePtr);
m_FilePtr?=?NULL;
//?對有紋理的材質(zhì)載入該紋理
for?(int?i=0;?i {
if?(m_3DModel.pMaterials[i].isTexMat)
{
if?(!BuildTexture(m_3DModel.pMaterials[i].mapName.string?m_3DModel.pMaterials[i].texureId))
{
//?紋理載入失敗
sprintf(strMessage?“3DS紋理文件載入失敗:?%s?!“?m_3DModel.pMaterials[i].mapName.string);
MessageBox(NULL?strMessage?“Error“?MB_OK);
}
}
}
return?true;
}
//?從文件中讀取1個字節(jié)
BYTE?C3DSModel::ReadByte(void)
{
BYTE?result?=?0;
fread(&result?1?1?m_FilePtr);
return?result;
}
//?從文件中讀取2個字節(jié)
WORD?C3DSModel::ReadWord(void)
{
return?ReadByte()?+?(ReadByte()<<8);
}
//?從文件中讀取4個字節(jié)
UINT?C3DSModel::ReadUint(void)
{
return?ReadWord()?+?(ReadWord()<<16);
}
//?從文件中讀取浮點數(shù)
float?C3DSModel::ReadFloat(void)
{
float?result;
fread(&result?sizeof(float)?1?m_FilePtr);
return?result;
}
//?從文件中讀取字符串(返回字符串長度)
UINT?C3DSModel::ReadString(STRING?*pStr)
{
int?n=0;
while?((pStr->string[n++]=ReadByte())?!=?0)
;
return?n;
}
//?讀取3ds的一個Chunk信息
void?C3DSModel::ReadChunk(tChunk?*pChunk)
{
fread(&pChunk->ID?1?2?m_FilePtr);
fread(&pChunk->length?1?4?m_FilePtr);
}
//?讀取3ds文件主要Chunk
UINT?C3DSModel::ReadPrimary(UINT?n)
{
UINT?count?=?0; //?該Chunk內(nèi)容已讀取的字節(jié)計數(shù)
tChunk?chunk?=?{0}; //?用以保存子Chunk的內(nèi)容
while?(count? {
ReadChunk(&chunk);
switch?(chunk.ID)
{
case?PRIM_EDIT:
ReadEdit(chunk.length-6);
break;
//case?PRIM_KEY:
// ReadKeyframe(chunk.length-6);
// break;
default:
fseek(m_FilePtr?chunk.length-6?SEEK_CUR);
break;
}
count?+=?chunk.length;
}
return?count;
}
//?讀取3ds物體主編輯Chunk
UINT?C3DSModel::ReadEdit(UINT?n)
{
UINT?count?=?0;
tChunk?chunk?=?{0};
while
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????514??2009-04-24?10:12??路燈\121.dsw
?????文件????????240??2009-04-24?19:27??路燈\121.plg
?????文件?????444799??2009-04-02?16:45??路燈\robot.3ds
?????文件???????3883??2009-04-24?10:27??路燈\121.dsp
?????文件???????3377??2009-04-24?19:15??路燈\fasd.dsp
?????文件??????24123??2009-04-24?20:27??路燈\fasd.cpp
?????文件????????892??2009-04-24?19:15??路燈\fasd.plg
?????文件?????509952??2009-04-24?20:27??路燈\121.exe
?????文件??????48640??2009-04-24?19:27??路燈\121.opt
?????文件??????48640??2009-04-24?19:32??路燈\fasd.opt
?????文件????7982080??2009-04-24?19:32??路燈\fasd.ncb
?????文件???????4817??2009-04-24?19:32??路燈\fasd.vcproj
????..A..H.??????8192??2009-04-24?19:32??路燈\fasd.suo
?????文件???????1427??2009-04-24?19:32??路燈\fasd.vcproj.496DD1411957409.Administrator.user
?????文件????8858624??2009-04-24?20:27??路燈\121.ncb
?????文件???????5630??2009-04-24?19:44??路燈\121.vcproj
?????文件????????876??2009-04-24?19:32??路燈\121.sln
????..A..H.??????9216??2009-04-24?20:27??路燈\121.suo
?????文件???????1427??2009-04-24?20:27??路燈\121.vcproj.496DD1411957409.Administrator.user
?????文件???????4781??2009-04-02?16:45??路燈\3ds.h
?????文件??????13724??2009-04-02?16:45??路燈\3ds.cpp
?????文件?????721964??2009-04-24?18:40??路燈\Gundam.3ds
?????文件?????140288??2009-04-24?19:27??路燈\Debug\vc60.idb
?????文件??????77824??2009-04-24?19:25??路燈\Debug\vc60.pdb
?????文件??????79630??2009-04-24?20:27??路燈\Debug\fasd.obj
?????文件?????360912??2009-04-24?20:27??路燈\Debug\121.ilk
?????文件???????7690??2009-04-24?20:27??路燈\Debug\BuildLog.htm
?????文件???????2048??2009-04-24?19:32??路燈\Debug\fasd.exe.em
?????文件?????576512??2009-04-24?20:27??路燈\Debug\vc90.idb
?????文件?????249856??2009-04-24?20:27??路燈\Debug\vc90.pdb
............此處省略20個文件信息
評論
共有 條評論