Toturial OpenGL

Just To show You how to import .3ds File To OpenGL

____________________________________________________________________________________________________________

:: Fungsi "ProcessNextChunk( )" :

  1. i. fungsi membaca setiap seksyen dalam fail .3ds dan dives kedalam menggunakan rekursif. Mulakan dengan menaip:-

    void CLoad3DS::ProcessNextChunk(t3DModel *pModel, tChunk *pPreviousChunk)
    {

    ii. kemudian taip aturcara dibawah :-

          1. t3DObject newObject = {0}; // ia diletakkan pada setiap list objek
            tMaterialInfo newTexture = {0}; // ia diletakkan pada setiap list metarial

            tChunk currentChunk = {0}; // memuatturun chunk
            tChunk tempChunk = {0}; // mengingatkan chunks untuk memegang metarial

    "Di bawah ini anda menyemak chunk ID setiap kali anda membaca chunk ID yang baru. Kemudian, sekiranya
    anda inign mengambil maklumat daripada chunk, anda boleh berbuat demikian. Sekiranya anda tidak memerlukan chunk, anda boleh membaca seleps ini."

  2. "Terus membaca sub chunks sehingga kita sampai panjang yang dikehendaki. Selepas anda membaca SEMUANYA anda tambahkan bytes yang dibaca dari chunk dam kemudian semak kembali panjangnya"
  3. iii.untuk menyemak mrnggunakan Case sila taip aturcara dibawah :-
        1. while
          1. (pPreviousChunk->bytesRead < pPreviousChunk->length)
            {
            ReadChunk(&currentChunk);
            // membaca chunk yang seterusnya

        case VERSION: { // memegang versi bagi fail

          1. " jika fail ini dibuat didalam 3D Studio Max, maka chunk bernilai integer dimana ia memegang versi file itu
            jika fail itu tidak dibuat dalam 3D Studio Max, anda tidak akan memiliki 100% versinya "

            // membaca versi fail dan meletakkan bcaan bytes untuk setipa "bytesRead" yang varibles

          2. currentChunk.bytesRead += fread(gBuffer, 1, currentChunk.length - currentChunk.bytesRead, m_FilePointer);

          3. // jika versi fail melebihi daripada 3, berikan warning kerana mungkin terdapat permasalahan yang berlaku
          4. //menggunakan Message box seperti dibawah.
          5. 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;}
        1. case OBJECTINFO:{ // ia digunakan untuk memegang versi mesh
          1. //ia selalunya menjadi kepala kepada MATERIAL dan OBJECT chunks.
          2. //Daripadanya kiata mula membaca didalam material dan objek

          3. ReadChunk(&tempChunk);// Baca chunk yang seterusnya
          4. //Dapatkan versi mesh
            tempChunk.bytesRead += fread(gBuffer, 1, tempChunk.length - tempChunk.bytesRead, m_FilePointer);
            // Tingkatkan bytesRead dengan bytes yang dibaca dari chunk sebelumnya
            currentChunk.bytesRead += tempChunk.bytesRead;
            // Pergi ke chunk yang seterusnya, yang mana objek mempunyai tekstur, ia perlulah MATERIAL, kemudian OBJECT.
            ProcessNextChunk(pModel, &currentChunk);
            break;}

        2. }
          case MATERIAL: // Ini menyimpan maklumat material

          // Chunk berikut adalah header bagi chunk info material
          // Tingkatkan bilangan material

          pModel->numOfMaterials++;

          // letakkan struktur texture kosong untuk setiap texture list.
          pModel->pMaterials.push_back(newTexture);

          // Teruskan ke fungsi muatturun material
          ProcessNextMaterialChunk(pModel, &currentChunk);
          break;

          case OBJECT: // ia memegang nama objeck yang hendak dibaca

          1. // Chunk berikut adalah header bagi objek info chunks. Ianya juga menyimpan nama bagi objek.
          2. // Tingkatkan bilangan objek
            pModel->numOfObjects++;

            // Masukkan nod baru tObject ke dalam senarai objek (seperti link list)
            pModel->pObject.push_back(newObject);

            // Beri nilai awalan pada objek dan semua kumpulan-kumpulan datanya
            memset(&(pModel->pObject[pModel->numOfObjects - 1]), 0, sizeof(t3DObject));

            // Dapatkan nama objek dan simpan, kemudian tambahkan byte yang telah dibaca ke dalam byte counter
            currentChunk.bytesRead += GetString(pModel->pObject[pModel->numOfObjects - 1].strName);

            // Sekarang teruskan membaca maklumat lain pada objek
            ProcessNextObjectChunk(pModel, &(pModel->pObject[pModel->numOfObjects - 1]), &currentChunk);


          3. break;
        3. case EDITKEYFRAME:
          1. //Membaca chunks dan meletakkan bacaan bytes kepada kiraan bytes
            currentChunk.bytesRead += fread(gBuffer, 1, currentChunk.length - currentChunk.bytesRead, m_FilePointer);
            break;

        default:

        // jika anda tidak kisah mengenai chunks dan anda akan berada di default. anda masih perlu membaca chunks yang perlu untuk Membaca chunks dan meletakkan bacaan bytes kepada kiraan bytes
        currentChunk.bytesRead += fread(gBuffer, 1, currentChunk.length - currentChunk.bytesRead, m_FilePointer);
        break;
        }

        // letakkan bacaan bytes daripada chunks yang terakhir kepada chunks yang sebelumnya
        pPreviousChunk->bytesRead += currentChunk.bytesRead;

        }

      }

____________________________________________________________________________________________________________

<Next Step Tutorial>
Hosted by www.Geocities.ws

1