




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
專題地形繪制基礎(chǔ)第一頁(yè),共四十頁(yè),2022年,8月28日拋磚引玉我們通常將游戲場(chǎng)面架設(shè)在起伏的山坡、綠草、沙灘、雪地、樹(shù)木、陽(yáng)光和霧等烘托出的自然環(huán)境中,這樣的場(chǎng)景可增加游戲的逼真度和吸引力。大家玩過(guò)的游戲中是否有非常逼真的場(chǎng)景給你留下了深刻的印象的?Copyright2008ByNeusoftGroup.Allrightsreserved第二頁(yè),共四十頁(yè),2022年,8月28日麻雀雖小,五臟俱全地形網(wǎng)格就是一系列三角形柵格(grid),但是方格中的每個(gè)頂點(diǎn)都被賦予了一個(gè)高度值(高度或海拔),這樣該方格就可通過(guò)方格對(duì)應(yīng)高度的平滑過(guò)渡來(lái)模擬自然地形中山脈到山谷的變化。然后,通過(guò)紋理來(lái)表現(xiàn)沙灘、綠草如茵丘陵和雪山等。Copyright2008ByNeusoftGroup.Allrightsreserved三角形柵格高度平滑過(guò)渡的三角形柵格具有光照和紋理的地形截圖第三頁(yè),共四十頁(yè),2022年,8月28日按部就班我們這個(gè)專題的主要內(nèi)容有:地形高度圖的創(chuàng)建和修改創(chuàng)建地形的幾何信息對(duì)地形進(jìn)行紋理映射和光照處理實(shí)現(xiàn)攝象機(jī)在地形中行走的效果Copyright2008ByNeusoftGroup.Allrightsreserved第四頁(yè),共四十頁(yè),2022年,8月28日地形高度圖從幾何形態(tài)來(lái)看,不同的地形外貌,取決于地形表面的每一個(gè)點(diǎn)距離地平面的高度值。這些高度值可用二維數(shù)組來(lái)存儲(chǔ),數(shù)組中的每一個(gè)元素就與地平面上每一個(gè)頂點(diǎn)的高度值一一對(duì)應(yīng)。Copyright2008ByNeusoftGroup.Allrightsreserved地平面頂點(diǎn)地形網(wǎng)格頂點(diǎn)高度值第五頁(yè),共四十頁(yè),2022年,8月28日我們使用高度圖(heightmap)來(lái)描述地形中的丘陵和山谷。通常高度圖以灰度圖(grayscalemap)的形式保存起來(lái)?;叶葓D中的亮度越大,表示地形中某一點(diǎn)的海拔越高。Copyright2008ByNeusoftGroup.Allrightsreserved第六頁(yè),共四十頁(yè),2022年,8月28日創(chuàng)建高度圖生成一個(gè)地形高度數(shù)據(jù)的最直接的方法是,利用圖形編輯軟件(如photoshop),繪制一個(gè)與地平面相同尺寸的灰度圖形,用作地形高度圖。圖形繪制完畢后,將其保存為8位的RAW(原始二進(jìn)制文件)文件,RAW文件連續(xù)存儲(chǔ)了圖像中以字節(jié)為單位的每個(gè)像素的灰度值。高度圖被保存在磁盤中,通常為其每個(gè)元素只分配一個(gè)字節(jié)的存儲(chǔ)空間,這樣高度只能在區(qū)間[0,255]內(nèi)。若0~255的高度值不足以表達(dá)我們要表達(dá)的地形,可以將高度圖數(shù)據(jù)加載到程序中時(shí),對(duì)其進(jìn)行一個(gè)比例變換,重新分配一個(gè)整型或浮點(diǎn)型數(shù)組來(lái)存儲(chǔ)這些高度值。Copyright2008ByNeusoftGroup.Allrightsreserved第七頁(yè),共四十頁(yè),2022年,8月28日我們?cè)诘匦晤?Terrain)中定義一個(gè)成員函數(shù)(readRawFile)用于讀取高度圖中的高度信息到一個(gè)向量里面:代碼中的變量_heightmap是Terrain類的一個(gè)成員變量。Copyright2008ByNeusoftGroup.Allrightsreservedstd::vector<int>_heightmap;boolTerrain::readRawFile(std::stringfileName){//Aheightforeachvertexstd::vector<BYTE>in(numVertices);std::ifstreaminFile(fileName.c_str(),std::ios_base::binary);if(inFile==0)returnfalse;inFile.read((char*)&in[0],//bufferin.size());//numberofbytestoreadintobufferinFile.close();
//copyBYTEvectortointvector_heightmap.resize(_numVertices);for(inti=0;i<in.size();i++)_heightmap[i]=in[i];returntrue;}第八頁(yè),共四十頁(yè),2022年,8月28日訪問(wèn)和修改高度圖Terrain類提供以下2個(gè)函數(shù)訪問(wèn)和修改高度圖中的指定項(xiàng):代碼中的變量numVertsPerRow是Terrain類的一個(gè)成員變量。這兩個(gè)方法允許我們通過(guò)行和列索引引用高度圖中指定的項(xiàng)。Copyright2008ByNeusoftGroup.AllrightsreservedintTerrain::getHeightmapEntry(introw,intcol){return_heightmap[row*_numVertsPerRow+col];}voidTerrain::setHeightmapEntry(introw,intcol,intvalue){_heightmap[row*_numVertsPerRow+col]=value;}第九頁(yè),共四十頁(yè),2022年,8月28日創(chuàng)建地形幾何信息Copyright2008ByNeusoftGroup.Allrightsreserved右圖向我們展示了地形的一些相關(guān)的屬性和術(shù)語(yǔ)。我們通過(guò)指定每行和每列的頂點(diǎn)數(shù)以及單元間距(cellspacing)來(lái)定義地形的尺寸。這些值將作為Terrian類的構(gòu)造函數(shù)的輸入?yún)?shù)。Terrian的構(gòu)造函數(shù)還傳入了與地形相關(guān)的設(shè)備指針、標(biāo)識(shí)存儲(chǔ)高度圖數(shù)據(jù)的文件的字符串,以及一個(gè)用于對(duì)高度圖中各元素實(shí)施比例變換的高度比例因子(heightScale)。三角形柵格的屬性,柵格上的點(diǎn)代表頂點(diǎn)第十頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.AllrightsreservedclassTerrain{public:Terrain(IDirect3DDevice9*device,std::stringheightmapFileName,intnumVertsPerRow,intnumVertsPerCol,intcellSpacing,//spacebetweencellsfloatheightScale);//valuetoscaleheightsby
...methodssnippedprivate:
...device/vertexbufferetcsnippedint_numVertsPerRow;int_numVertsPerCol;int_cellSpacing;int_numCellsPerRow;int_numCellsPerCol;int_width;int_depth;int_numVertices;int_numTriangles;float_heightScale;};第十一頁(yè),共四十頁(yè),2022年,8月28日我們可由構(gòu)造函數(shù)的傳入?yún)?shù)計(jì)算出地形的其他變量:Copyright2008ByNeusoftGroup.Allrightsreserved_numCellsPerRow=_numVertsPerRow-1;_numCellsPerCol=_numVertsPerCol-1;_width=_numCellsPerRow*_cellSpacing;_depth=_numCellsPerCol*_cellSpacing;_numVertices=_numVertsPerRow*_numVertsPerCol;_numTriangles=_numCellsPerRow*_numCellsPerCol*2;第十二頁(yè),共四十頁(yè),2022年,8月28日地形的頂點(diǎn)結(jié)構(gòu)定義如下:Copyright2008ByNeusoftGroup.AllrightsreservedstructTerrainVertex{TerrainVertex(){}TerrainVertex(floatx,floaty,floatz,floatu,floatv){_x=x;_y=y;_z=z;_u=u;_v=v;}float_x,_y,_z;float_u,_v;staticconstDWORDFVF;};ConstDWORDTerrain::TerrainVertex::FVF=3DFVF_XYZ|D3DFVF_TEX1;注意:TerrainVertex是一個(gè)嵌套類(nestedclass),該類只在Terrian類的內(nèi)部使用。第十三頁(yè),共四十頁(yè),2022年,8月28日1、頂點(diǎn)的計(jì)算為了計(jì)算三角形柵格的各頂點(diǎn),我們只需自頂點(diǎn)start起,逐行生成每個(gè)頂點(diǎn),保持相鄰頂點(diǎn)的行列間隔均為單元間距(cellspacing),直至到達(dá)頂點(diǎn)end為止。這樣可以得到每個(gè)頂點(diǎn)的x和z坐標(biāo)的定義,而每個(gè)頂點(diǎn)的y坐標(biāo)的值我們要根據(jù)所加載的高度圖數(shù)據(jù)結(jié)構(gòu)中的相應(yīng)項(xiàng)來(lái)獲得。Copyright2008ByNeusoftGroup.Allrightsreserved第十四頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved計(jì)算紋理坐標(biāo):結(jié)合下圖來(lái)看,我們可以推導(dǎo)出地形中位于(i,j)的頂點(diǎn)相對(duì)應(yīng)的紋理坐標(biāo)(u,v)的計(jì)算公式。地形中的頂點(diǎn)與紋理頂點(diǎn)的對(duì)應(yīng)關(guān)系u=j*uCoordIncrementSizev=i*vCoordIncrementSize其中:第十五頁(yè),共四十頁(yè),2022年,8月28日下面是生成各頂點(diǎn)的代碼:Copyright2008ByNeusoftGroup.AllrightsreservedboolTerrain::computeVertices(){HRESULThr=0;hr=_device->CreateVertexBuffer(_numVertices*sizeof(TerrainVertex),D3DUSAGE_WRITEONLY,TerrainVertex::FVF,D3DPOOL_MANAGED,&_vb,0);if(FAILED(hr))returnfalse;
//對(duì)應(yīng)第一個(gè)生成的頂點(diǎn)坐標(biāo)intstartX=-_width/2;intstartZ=_depth/2;
//對(duì)應(yīng)最后一個(gè)生成的頂點(diǎn)坐標(biāo)intendX=_width/2;intendZ=-_depth/2;//計(jì)算相鄰紋理坐標(biāo)的增量值
floatuCoordIncrementSize=1.0f/(float)_numCellsPerRow;floatvCoordIncrementSize=1.0f/(float)_numCellsPerCol;第十六頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.AllrightsreservedTerrainVertex*v=0;_vb->Lock(0,0,(void**)&v,0);inti=0;
for(intz=startZ;z>=endZ;z-=_cellSpacing){intj=0;for(intx=startX;x<=endX;x+=_cellSpacing){
//計(jì)算正確的頂點(diǎn)信息放入頂點(diǎn)緩存中intindex=i*_numVertsPerRow+j;v[index]=TerrainVertex((float)x,(float)_heightmap[index],(float)z,(float)j*uCoordIncrementSize,(float)i*vCoordIncrementSize);j++;//下一列}i++;//下一行
}_vb->Unlock();returntrue;}第十七頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved2、索引的計(jì)算為計(jì)算三角形柵格各頂點(diǎn)的索引,我們只需自右圖的左上角起至右下角,依次遍歷每個(gè)方格,并計(jì)算構(gòu)成每個(gè)方格的三角面片的頂點(diǎn)索引。由右圖我們可以推導(dǎo)出一個(gè)用于求出構(gòu)成第i行、第j列的方格的兩個(gè)面片的頂點(diǎn)索引的通用公式:?ABC={i·numVertsPerRow+ji·numVertsPerRow+j+1(i+1).numVertsPerRow+j}?CBD={(i+1)numVertsPerRow+ji·numVertsPerRow+j+1(i+l)numVertsPerRow+j+1}第十八頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved下面是計(jì)算索引的代碼:boolTerrain::computeIndices(){HRESULThr=0;hr=_device->CreateIndexBuffer(_numTriangles*3*sizeof(WORD),//每個(gè)三角形有3個(gè)索引D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&_ib,0);if(FAILED(hr))returnfalse;WORD*indices=0;_ib->Lock(0,0,(void**)&indices,0);
第十九頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved//將組成一個(gè)方格的2個(gè)三角形的一組6個(gè)索引的開(kāi)始位置編入索引intbaseIndex=0;
//從頭到尾計(jì)算每一個(gè)格子中的三角形for(inti=0;i<_numCellsPerCol;i++)//行循環(huán){for(intj=0;j<_numCellsPerRow;j++)//列循環(huán){indices[baseIndex]=i*_numVertsPerRow+j;indices[baseIndex+1]=i*_numVertsPerRow+j+1;indices[baseIndex+2]=(i+1)*_numVertsPerRow+j;indices[baseIndex+3]=(i+1)*_numVertsPerRow+j;indices[baseIndex+4]=i*_numVertsPerRow+j+1;indices[baseIndex+5]=(i+1)*_numVertsPerRow+j+1;
//nextquadbaseIndex+=6;}}_ib->Unlock();returntrue;}第二十頁(yè),共四十頁(yè),2022年,8月28日紋理映射Terrain類的紋理映射方式是加載一個(gè)已經(jīng)創(chuàng)建好的紋理文件,然后再應(yīng)用該紋理數(shù)據(jù)。右邊的代碼就是將紋理數(shù)據(jù)自文件加載到了_tex數(shù)據(jù)成員中,其中_tex是一個(gè)指向IDirect3DTexture9接口的指針。Copyright2008ByNeusoftGroup.AllrightsreservedboolTerrain::loadTexture(std::stringfileName){HRESULThr=0;hr=D3DXCreateTextureFromFile(_device,fileName.c_str(),&_tex);if(FAILED(hr))returnfalse;returntrue;}第二十一頁(yè),共四十頁(yè),2022年,8月28日光照為了給地形場(chǎng)景增強(qiáng)真實(shí)感,我們?cè)趫?chǎng)景中添加光照的成員函數(shù)Terrain::lightTerrain。由于地形是靜態(tài)的,且光源一般也不發(fā)生移動(dòng),所以我們可以預(yù)先對(duì)光照進(jìn)行計(jì)算,這樣節(jié)省了Direct3D實(shí)時(shí)照亮地形那部分計(jì)算時(shí)間。并且這樣的計(jì)算無(wú)需給每個(gè)頂點(diǎn)存儲(chǔ)頂點(diǎn)的法向量,所以可以節(jié)省大量?jī)?nèi)存Copyright2008ByNeusoftGroup.Allrightsreserved第二十二頁(yè),共四十頁(yè),2022年,8月28日我們計(jì)算地形的明暗用到最基本的漫反射光的光照。給定一個(gè)平行光源,用“到達(dá)光源的方向”(該光源發(fā)出的平行光的傳播方向的反方向)來(lái)描述該平行光源。再計(jì)算地形中的每個(gè)坐標(biāo)方格計(jì)算光向量L和該方格的面法向量N之間的夾角。由右圖可知,上述夾角越大,坐標(biāo)方格的朝向偏離光源就越大,其所接收到的光照就越少。反之,越多。當(dāng)夾角超過(guò)90度,方格表明接收不到任何光照。第二十三頁(yè),共四十頁(yè),2022年,8月28日由光向量和方格的面法向量之間的角度關(guān)系,我們可以構(gòu)造一個(gè)位于區(qū)間[0,1]內(nèi)的明暗因子(shadingscalar),來(lái)表示方格表明所接收到的光照的量。明暗因子接近于0,則表示這兩個(gè)向量的夾角很大。當(dāng)紋理的顏色與其相乘時(shí),顏色值就趨于0,從而呈現(xiàn)出教暗的視覺(jué)效果。反之,若該值接近1,則表示兩個(gè)向量的夾角很小,當(dāng)紋理的顏色值與其相乘時(shí),該顏色基本保持了原來(lái)的亮度。Copyright2008ByNeusoftGroup.Allrightsreserved第二十四頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved坐標(biāo)方格的明暗度計(jì)算光源的方向L是已知量,我們要想辦法求出方格的法向量N。方格中任意兩個(gè)向量的叉積可得到N,然后再對(duì)N進(jìn)行規(guī)范化。右圖中我們找到方格中兩個(gè)非零且不平行的向量:u,v。u=(cellSpacing,by-ay,0)v=(0,cy-ay,-cellSpacing)N=u×v
第二十五頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.AllrightsreservedL和N之間的夾角我們轉(zhuǎn)化為求他們的點(diǎn)積,3D空間中的兩個(gè)單位向量的點(diǎn)積等于這兩個(gè)向量之間夾角的余弦。S=L·N-1<s<1當(dāng)s<0時(shí),取s=0。代碼:Terrain::computeShade來(lái)計(jì)算明暗因子:floatcosine=D3DXVec3Dot(&n,directionToLight);if(cosine<0.0f)cosine=0.0f;floatTerrain::computeShade(intcellRow,intcellCol,D3DXVECTOR3*directionToLight){
//取得方格中三個(gè)頂點(diǎn)的高度(從高度圖中)floatheightA=getHeightmapEntry(cellRow,cellCol);floatheightB=getHeightmapEntry(cellRow,cellCol+1);floatheightC=getHeightmapEntry(cellRow+1,cellCol);第二十六頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved//創(chuàng)建方格中的二個(gè)頂點(diǎn)D3DXVECTOR3u(cellSpacing,heightB-heightA,0.0f);D3DXVECTOR3v(0.0f,heightC-heightA,-cellSpacing);//用方格中的二個(gè)向量的叉積找到面法線D3DXVECTOR3n;D3DXVec3Cross(&n,&u,&v);D3DXVec3Normalize(&n,&n);floatcosine=D3DXVec3Dot(&n,directionToLight);if(cosine<0.0f)cosine=0.0f;returncosine;}第二十七頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved對(duì)地形進(jìn)行著色我們已經(jīng)可以計(jì)算出每個(gè)方格的明暗因子,現(xiàn)在,只需遍歷地形中的每個(gè)方格,計(jì)算其明暗因子,然后將該方格對(duì)應(yīng)的紋理元的顏色與該因子相乘。下面一段代碼展示了Terrain::lightTerrain方法的重要部分。DWORD*imageData=(DWORD*)lockedRect.pBits;for(inti=0;i<textureDesc.Height;i++){for(intj=0;j<textureDesc.Width;j++){intindex=i*lockedRect.Pitch/4+j;
//取得當(dāng)前單元的顏色值D3DXCOLORc(imageData[index]);
//給當(dāng)前單元著色c*=computeShade(i,j,lightDirection);;
//保存著色結(jié)果imageData[index]=(D3DCOLOR)c;}}第二十八頁(yè),共四十頁(yè),2022年,8月28日在地形中“行走”地形的繪制以及紋理映射、光照的處理我們都完成了,現(xiàn)在我們來(lái)實(shí)現(xiàn)移動(dòng)攝像機(jī)模擬在場(chǎng)景中行走的過(guò)程。攝像機(jī)的實(shí)現(xiàn)我們已經(jīng)在前面的專題中實(shí)現(xiàn)了,可以直接使用封裝好的攝像機(jī)類來(lái)使用攝像機(jī)。我們要讓攝像機(jī)在地形中行走,不能穿地形到下面,或者懸浮到地形上面。最主要的就是要根據(jù)攝像機(jī)的位置來(lái)確定它的高度(y坐標(biāo))。過(guò)程:依據(jù)給定的x和z坐標(biāo)找到我們所處的坐標(biāo)方格。Terrain::getHeight函數(shù)實(shí)現(xiàn)了該功能,它以x和z坐標(biāo)為參數(shù),并返回?cái)z像機(jī)應(yīng)處在的高度(海拔)。Copyright2008ByNeusoftGroup.Allrightsreserved第二十九頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.AllrightsreservedfloatTerrain::getHeight(floatx,floatz){
//在xz平面上把地形的START點(diǎn)移動(dòng)到坐標(biāo)原點(diǎn)的位置x=((float)width/2.0f)+x;z=((float)depth/2.0f)-z;
//把cellspacing進(jìn)行比例變換讓其等于1x/=(float)cellSpacing;z/=(float)_cellSpacing;首先,進(jìn)行平移變換,將頂點(diǎn)start平移至坐標(biāo)原點(diǎn)。然后,通過(guò)縮放因子為單元間隔的負(fù)倒數(shù)的比例變換將坐標(biāo)方格的單元間隔歸一化?,F(xiàn)在,我們就轉(zhuǎn)換到了一個(gè)新的參考系中,其中z軸方向向“下”(理解上)。上述過(guò)程如右圖所示第三十頁(yè),共四十頁(yè),2022年,8月28日Copyright2008ByNeusoftGroup.Allrightsreserved經(jīng)過(guò)這樣的變換以后,坐標(biāo)系與矩陣的順序保持了一致。即左上角為原點(diǎn),列索引和行索引分別沿著向右方向和向下方向遞增。目前單元間距為1,所以,我們可以迅速求出當(dāng)前我們所處的坐標(biāo)方格的行列索引。知道了坐標(biāo)方格的行列索引,我們就知道了當(dāng)前所處的坐標(biāo)方格,就可求出構(gòu)成該方格的4個(gè)頂點(diǎn)的高度。floatcol=::floorf(x);//小于等于x的最大整數(shù)值floatrow=::floorf(z);//AB//*--* //|/|
//*--* //CD
floatA=getHeightmapEntry(row,col);floatB=getHeightmapEntry(row,col+1);floatC=getHeightmapEntry(row+1,col);floatD=getHeightmapEntry(row+1,col+1);第三十一頁(yè),共四十頁(yè),2022年,8月28日如右圖所示,當(dāng)前所處的方格位置以及構(gòu)成該方格的4個(gè)頂點(diǎn)的高度均已知。我們要求攝像機(jī)位于任意的位置(x,z)時(shí),坐標(biāo)方格單元的高度。因?yàn)榉礁窨赡艹鄠€(gè)方向發(fā)生傾斜,所以我們要求出這個(gè)y值相對(duì)比較困難。第三十二頁(yè),共四十頁(yè),2022年,8月28日為了求出攝像機(jī)所在位置的高度,我們首先需要判斷攝像機(jī)當(dāng)前處于哪個(gè)坐標(biāo)方格內(nèi)。而每個(gè)坐標(biāo)方格都是由兩個(gè)三角面片的組合來(lái)繪制的。為了求出攝像機(jī)當(dāng)前所處的三角形面片,我們需要對(duì)當(dāng)前所處的坐標(biāo)方格進(jìn)行變換,使其左上角的頂點(diǎn)與坐標(biāo)原點(diǎn)重合。由于col和row描述了當(dāng)前坐標(biāo)方格的左上角頂點(diǎn)的位置,我們必須沿x軸平移-col個(gè)單位,并沿z軸平移-row個(gè)單位。floatdx=x-col;floatdz=z-row;第三十三頁(yè),共四十頁(yè),2022年,8月28日如果dz<1.0-dx,我們當(dāng)前就位于上三角形面片△v0v1v2中,否則就在下三角形面片△v0v2v3中。當(dāng)攝像機(jī)處于上三角面片中時(shí),我們沿著該三角形的AB、AC兩個(gè)邊,以向量q=(qx,A,qz)為始端分別構(gòu)造兩個(gè)向量u=(cellSpacing,B-A,0),v=(0,C-A,-cellSpacing)。我們沿著u軸對(duì)點(diǎn)dx進(jìn)行線性插值,再沿著v軸對(duì)dz點(diǎn)進(jìn)行線性插值。若給定x坐
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村公路養(yǎng)護(hù)管理合同(含交通安全設(shè)施維護(hù))
- 家長(zhǎng)會(huì)學(xué)生主持發(fā)言稿
- 上海市業(yè)主總包分包合同
- 2024年公司勞動(dòng)合同
- 2025年江西貨運(yùn)從業(yè)資格證考試模擬考試題庫(kù)答案大全
- IT支持與服務(wù)記錄表格
- 《語(yǔ)文古典詩(shī)詞鑒賞與創(chuàng)作指導(dǎo)》
- 股份制合作協(xié)議文書范例
- 2025屆廣西壯族自治區(qū)桂林市疊彩區(qū)高三一模地理試題(解析版)
- 手設(shè)備采購(gòu)合同稿
- 小學(xué)教學(xué)質(zhì)量分析報(bào)告教學(xué)課件
- 《煙花爆竹基礎(chǔ)知識(shí)》課件
- 井下刷漆-安全技術(shù)措施
- 連乘兩步計(jì)算的實(shí)際問(wèn)題
- 拼多多民事起訴狀模板
- 中國(guó)畫的特點(diǎn)及分類課件
- 廠房租賃合同糾紛起訴狀
- 重大危險(xiǎn)源監(jiān)理實(shí)施細(xì)則(二篇)
- 國(guó)際稅法教學(xué)課件國(guó)際稅法
- 自身免疫性多內(nèi)分泌腺體綜合征
-
評(píng)論
0/150
提交評(píng)論