void CLoad3DS::ProcessNextObjectChunk(t3DModel
*pModel, t3DObject *pObject, tChunk *pPreviousChunk)
{
//chunk semasa
tChunk currentChunk = {0};
//teruskan baca chunks sehingga
sub chunk berakhir
while (pPreviousChunk->bytesRead < pPreviousChunk->length)
{
//baca chunk seterusnya
ReadChunk(¤tChunk);
//semak chunk yg dibaca
switch (currentChunk.ID)
{
case OBJECT_MESH: //memberitahu
kita sedang baca objek baru
//jumpa objek baru, jadi baca maklumat
menggunakan rekursif
ProcessNextObjectChunk(pModel, pObject, ¤tChunk);
break;
case
OBJECT_VERTICES: //ini adalah
verteks objek
ReadVertices(pObject, ¤tChunk);
break;
case
OBJECT_FACES: //ini adalah
maklumat permukaan objek
ReadVertexIndices(pObject, ¤tChunk);
break;
case
OBJECT_MATERIAL: //pegang
nama material objek
<Info>
"chunks ini memegang nama yang berpautan dengan material
dimana sesuatu objek telah di umpukkan keatasnya disamping itu
juga mengandungi maklumat mengenai warna dan mapping. Pada kebiasaannya
chunk memegang permukaan yang mana texture telah diumpukkan keatasnya.
Kadang-kadang banyak texture yang diumpukkan kepada satu objek,
atau hanya mempunyai texture sahaja pada permukaan objek, tapi
pada Case OBJECT_MATERIAL anda hanya perlu tahu nama bagi material
itu"
//Sekarang kita membaca nama material
yang telah diumpukka kepada objek.
ReadObjectMaterial(pModel, pObject, ¤tChunk);
break;
case
OBJECT_UV: //ia memegang
kordinat UV texture bagi objek
//ia memegang semua kordinat UV
texture bagi semua objek. Mari kita baca bersama adik-adik
ReadUVCoordinates(pObject, ¤tChunk);
break;
default:
// baca atau abaikan chunks yang
tidak dikenali
currentChunk.bytesRead += fread(gBuffer, 1, currentChunk.length
- currentChunk.bytesRead, m_FilePointer);
break;
}
// meletakkan bacaan byte daripada
chunk yang terakhir kedalam chunk yang sebelumnya
pPreviousChunk->bytesRead += currentChunk.bytesRead;
}
}