Toturial OpenGL

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

____________________________________________________________________________________________________________

:: Fungsi "ReadUVCoordinates( )" :

  1. i. Fungsi ini membaca Kordinat UV bagi objek, emm dan seterunya lihat aturcara dibawah :-
  2. void CLoad3DS::ReadUVCoordinates(t3DObject *pObject, tChunk *pPreviousChunk)
    {

    <Info>" didalam membaca index UV bagi objek, pertama kita perlu membaca bilangan dan seterunya membaca keseluruhannya"


    // disini tempat bagi membaca bilanagan kordinat UV
    pPreviousChunk->bytesRead += fread(&pObject->numTexVertex, 1, 2, m_FilePointer);


    // mengumpukkan memory untuk memegang korninat UV
    pObject->pTexVerts = new CVector2 [pObject->numTexVertex];


    // membaca kordinat texture
    pPreviousChunk->bytesRead += fread(pObject->pTexVerts, 1, pPreviousChunk->length - pPreviousChunk->bytesRead, m_FilePointer);
    }

 

__________________________________________________________________________________________________

 

:: Fungsi "ReadVertices( )" :

  1. i. fungsi membaca bilangan puncak bagi objek
        1. void CLoad3DS::ReadVertices(t3DObject *pObject, tChunk *pPreviousChunk)
          {

          <Info>"Bagi kebnyakan chunks, sebelum ia dibaca, anda perlu mencari berapa banyak ia perlu dibaca.
          salah satunya anda bilangan setiap tatasusunan puncak"
        2. // membaca bilangan puncak dalam nilai integer
          pPreviousChunk->bytesRead += fread(&(pObject->numOfVerts), 1, 2, m_FilePointer);


          // mengumpukkan memory untuk puncak-puncak dan mengenalpasti bentuknya
          pObject->pVerts = new Vec3f [pObject->numOfVerts];
          memset(pObject->pVerts, 0, sizeof(Vec3f) * pObject->numOfVerts);


          // membca tatasusunan puncak
          pPreviousChunk->bytesRead += fread(pObject->pVerts, 1, pPreviousChunk->length - pPreviousChunk->bytesRead, m_FilePointer);

          <Info>" anda semestinya telah mempunyai keseluruhan nilai puncak. ini kerana didalam model 3D Studio Max dengan paksi-Z. anda perlu menukar nilai puncak diantara y dan z. dengan cara itu kita akan jadi seperti sediakala. jika anda masih berdegil ingin menggunkan paksi-z sili delete gelung dibawah. ini kerana ia akan menukar nilai y dan z.. dan kita perlu memastikan nilai ke;uaran adalah normal"


          // baca keseluruh puncak dan kemudian menukar nilai y dan z
          for(int i = 0; i < pObject->numOfVerts; i++)
          {

          //menyimpan nilai Y
          float fTempY = pObject->pVerts[i].y;


        3. // set nilai Y kepada nilai Z
          pObject->pVerts[i].y = pObject->pVerts[i].z;

          // Set the Z value to the Y value,
          pObject->pVerts[i].z = -fTempY;
          }
          }

_____________________________________________________________________________________________________________

:: Fungsi "ReadObjectMaterial( )" :

  1. i. Fungsi ini membaca nama materiel yang diumpukkan kepada objek dan jadikan ia sebagai sebagai materialID

    void CLoad3DS::ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk)
    {
    char strMaterial[255] = {0}; // memegang nama meteriel objek

    <info>"apa itu materiel???
    - ia merupakan textyre map(kulit rupabentuk permukaaan) bagi objek, ia mengandungi maklumat brightness, shine, dan bemacam-macam lagi. tapi ia tidak berapa penting., Ynag kita perlua adalah warna atau pun nama fail bagi texture map

    /* disini kita membaca nama metariel yang mana telah diumpukkan kepada objek ysedia ada.*/
    pPreviousChunk->bytesRead += GetString(strMaterial);


    <Info>" buat masa sekrang anda telah memiliki nama bagi metariel, kita perlu lalui seluruh metariel untuk untuk menguji nama bagi setiap metariel.jika menjumpai metariel itu didalam metariel list kita perlu membandingkan untuk menbagi objek kepada material index. Kamu akan diberitahu jika ia masuuk kedalam model fungsiIn kerana kita memerlukan bilangan texture"


    // melalui keseluruhan texture

    for(int i = 0; i < pModel->numOfMaterials; i++)
    {
    //jika nama meteriel yang dibaca sepada dalam texture list
    if(strcmp(strMaterial, pModel->pMaterials[i].strName) == 0)
    {
    // umpukkan material ID kepada nilai index 'i' dan menghentikan pengujian
    pObject->materialID = i;


    //sudah jumper materiel maka kenal pasti agar ia adalah texture map
    //jika strFile mempunyai panjang string =1

    if(strlen(pModel->pMaterials[i].strFile) > 0) {


    //umpukkan flag objek
    pObject->bHasTexture = true;
    }
    break;
    }
    else
    {

    //umpukkan materialID = -1 untuk memberitahu bahawa tidak texture map bagi objek tersebut
    pObject->materialID = -1;
    }
    }

    pPreviousChunk->bytesRead += fread(gBuffer, 1, pPreviousChunk->length - pPreviousChunk->bytesRead, m_FilePointer);
    }

_____________________________________________________________________________________________________________

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

1