91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 719KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-06-03
  • 語言: 其他
  • 標(biāo)簽: 3ds??opengl??

資源簡介

在3dsmax下自制的椅子貼上紋理導(dǎo)出為3ds格式,將3ds文件采用glut編程的方法將其導(dǎo)入opengl中,并用鼠標(biāo)左鍵實(shí)現(xiàn)旋轉(zhuǎn),右鍵實(shí)現(xiàn)縮放,ctrl+左鍵實(shí)現(xiàn)平移。

資源截圖

代碼片段和文件信息

#include?“main.h“

bool?CLoad3DS::Import3DS(t3DModel?*pModel?char?*strFileName)//********************************************************************
{
char?strMessage[255]?=?{0};
tChunk?currentChunk={0};
int?i=0;

//?打開一個3ds文件
m_FilePointer?=?fopen(strFileName?“rb“);

//?確保所獲得的文件指針合法
if(!m_FilePointer)?
{
sprintf(strMessage?“Unable?to?find?the?file:?%s!“?strFileName);
MessageBox(NULL?strMessage?“Error“?MB_OK);
return?false;
}

//?當(dāng)文件打開之后,首先應(yīng)該將文件最開始的數(shù)據(jù)塊讀出以判斷是否是一個3ds文件
//?如果是3ds文件的話,第一個塊ID應(yīng)該是PRIMARY

//?將文件的第一塊讀出并判斷是否是3ds文件
ReadChunk(¤tChunk);//讀出塊的id和塊的size

//?確保是3ds文件
if?(currentChunk.ID?!=?PRIMARY)//打頭的都是基本塊,這個是區(qū)別
{
sprintf(strMessage?“Unable?to?load?PRIMARY?chuck?from?file:?%s!“?strFileName);
MessageBox(NULL?strMessage?“Error“?MB_OK);
return?false;
}

//?現(xiàn)在開始讀入數(shù)據(jù),ProcessNextChunk()是一個遞歸函數(shù)

//?通過調(diào)用下面的遞歸函數(shù),將對象讀出
ProcessNextChunk(pModel?¤tChunk);

//?在讀完整個3ds文件之后,計算頂點(diǎn)的法線
ComputeNormals(pModel);

//?釋放內(nèi)存空間
CleanUp();

return?true;
}


//??下面的函數(shù)釋放所有的內(nèi)存空間,并關(guān)閉文件
void?CLoad3DS::CleanUp()//**************************************************************************
{
if(m_FilePointer)
{ fclose(m_FilePointer); //?關(guān)閉當(dāng)前的文件指針
m_FilePointer=NULL;
}
}



//??下面的函數(shù)讀出3ds文件的主要部分
void?CLoad3DS::ProcessNextChunk(t3DModel?*pModel?tChunk?*pPreviousChunk)//***************************************************************
{
t3Dobject?newobject?=?{0}; //?用來添加到對象鏈表
tMaterialInfo?newTexture?=?{0}; //?用來添加到材質(zhì)鏈表
tChunk?currentChunk={0};????????????????????//?用來添加到當(dāng)前塊鏈表
tChunk?tempChunk={0};???????????????????????//?用來添加到臨時塊鏈表
// unsigned?int?version?=?0; //?保存文件版本
int?gBuffer[50000]?=?{0}; //?用來跳過不需要的數(shù)據(jù)

// m_CurrentChunk?=?new?tChunk; //?為新的塊分配空間

//??下面每讀一個新塊,都要判斷一下塊的ID,如果該塊是需要的讀入的,則繼續(xù)進(jìn)行
//??如果是不需要讀入的塊,則略過

//?繼續(xù)讀入子塊,直到達(dá)到預(yù)定的長度
while?(pPreviousChunk->bytesRead?length)
{
//?讀入下一個塊
ReadChunk(¤tChunk);

//?判斷塊的ID號
switch?(currentChunk.ID)
{
case?VERSION: //?文件版本號

//?在該塊中有一個無符號短整型數(shù)保存了文件的版本

//?讀入文件的版本號,并將字節(jié)數(shù)添加到bytesRead變量中
currentChunk.bytesRead?+=?fread(gBuffer?1?currentChunk.length?-?currentChunk.bytesRead?m_FilePointer);

//?如果文件版本號大于3,給出一個警告信息
if?((currentChunk.length?-?currentChunk.bytesRead==4)&&(gBuffer[0]>?0x03))
MessageBox(NULL?“This?3DS?file?is?over?version?3?so?it?may?load?incorrectly“?“Warning“?MB_OK);
break;

case?objectINFO: //?網(wǎng)格版本信息

//?讀入下一個塊
ReadChunk(&tempChunk);

//?獲得網(wǎng)格的版本號
tempChunk.bytesRead?+=?fread(gBuffer?1?tempChunk.length?-?tempChunk.bytesRead?m_FilePointer);

//?增加讀入的字節(jié)數(shù)
currentChunk.bytesRead?+=?tempChunk.bytesRead;

//?進(jìn)入下一個塊
ProcessNextChunk(pModel?¤tChunk);
break;

case?MATERIAL: //?材質(zhì)信息

//?材質(zhì)的數(shù)目遞增
pModel->numOfMaterials++;

//?在紋理鏈表中添加一個空白紋理結(jié)構(gòu)
pModel->vctMaterials.push_back(newTex

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????20764??2012-09-26?14:05??3ds.cpp
?????文件???????10438??2012-09-26?13:57??main.cpp
?????文件????????5695??2012-09-25?23:55??main.h
?????文件??????413862??2012-09-25?21:15??mucai110.bmp
?????文件??????196662??2012-09-25?21:08??pige132.bmp
?????文件??????579654??2012-09-25?21:18??qiangzhi.bmp
?????文件????????4063??2012-09-25?22:10??ren.dsp
?????文件?????????512??2012-09-25?11:53??ren.dsw
?????文件??????190389??2012-09-25?21:54??wenli4.3DS

評論

共有 條評論