xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

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

資源簡(jiǎn)介

在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;

//?打開(kāi)一個(gè)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)文件打開(kāi)之后,首先應(yīng)該將文件最開(kāi)始的數(shù)據(jù)塊讀出以判斷是否是一個(gè)3ds文件
//?如果是3ds文件的話,第一個(gè)塊ID應(yīng)該是PRIMARY

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

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

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

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

//?在讀完整個(gè)3ds文件之后,計(jì)算頂點(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}; //?用來(lái)添加到對(duì)象鏈表
tMaterialInfo?newTexture?=?{0}; //?用來(lái)添加到材質(zhì)鏈表
tChunk?currentChunk={0};????????????????????//?用來(lái)添加到當(dāng)前塊鏈表
tChunk?tempChunk={0};???????????????????????//?用來(lái)添加到臨時(shí)塊鏈表
// unsigned?int?version?=?0; //?保存文件版本
int?gBuffer[50000]?=?{0}; //?用來(lái)跳過(guò)不需要的數(shù)據(jù)

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

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

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

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

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

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

//?如果文件版本號(hào)大于3,給出一個(gè)警告信息
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)格版本信息

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

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

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

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

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

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

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

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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

評(píng)論

共有 條評(píng)論