2012-01-24 22 views
0

私はOpenGLで3Dモデルを読み込もうとしています。私は今私は同じローダーを使用して350000の頂点を持っているモデルをロードしようとしている2000の頂点を持っている小さなモデルを読み込むことに成功しているが、それは単に表示されません。 iはhttp://www.morrowland.com/apron/tut_gl.php からローダを使用しています、これは私は3DS形式を使用していOpenGLで3Dモデルを読み込む

iは3DSモデル

void C3dsLoader::Render_3ds() 
{ 

for(int i = 0; i < m3DModel.numOfObjects; i++) 
{ 

    if(m3DModel.pObject.size() <= 0) break;      

    t3DObject *pObject = &m3DModel.pObject[i];     

    if(pObject->bHasTexture)          
    {         
     glEnable(GL_TEXTURE_2D);         

     glColor3ub(255, 255, 255);        

     glBindTexture(GL_TEXTURE_2D, TextureArray3ds[pObject->materialID]); 
    } 
    else 
    { 
     glDisable(GL_TEXTURE_2D);        

     glColor3ub(255, 255, 255);        
    } 

    glBegin(GL_TRIANGLES);          

    for(int j = 0; j < pObject->numOfFaces; j++) 
    { 

     for(int whichVertex = 0; whichVertex < 3; whichVertex++) 
     { 
      int index = pObject->pFaces[j].vertIndex[whichVertex]; 

      glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z); 

      if(pObject->bHasTexture) { 

       if(pObject->pTexVerts) { 
        glTexCoord2f(pObject->pTexVerts[ index ].x, pObject->pTexVerts[ index ].y); 
       } 
      } else { 

       if(m3DModel.pMaterials.size() < pObject->materialID) 
       { 
        BYTE *pColor = m3DModel.pMaterials[pObject->materialID].color; 

        glColor3ub(pColor[0], pColor[1], pColor[2]); 
       } 
      } 

      glVertex3f(pObject->pVerts[ index ].x, pObject->pVerts[ index ].y, pObject->pVerts[ index ].z); 
     } 
    } 

    glEnd(); 
} 

}をレンダリングする機能です。 これはなぜですか?

+0

多分、使用したチュートリアルのコードはオーバーフローして多数のプリミティブで壊れます。 – datenwolf

+0

オハイオ州、私は参照してください、 私は大きなモデルを読み込むことができるローダーを持つことができるリンクを私に提供することができますインターネット上のすべてのローダーが小さな3Dモデルのようであり、それらのどれも動作していないようです –

+0

私は3DSローダを手にしています。私のプロジェクトでは、まったく率直に言って、私はそのフォーマットを使用していません。私はWebGL用のJSONとスタンドアロンのプログラムプロジェクトでOpenCTMまたは独自のフォーマットを使用する傾向があります。 – datenwolf

答えて

-1

あなたは(いくつかのように

がとにかく古いスタイルのglVertexループを使用して、特に各頂点の色は非常に、非常に遅くなるだろう変更350K三角形モデルを表示カード上のメモリが不足することができます秒あたりのフレーム数)

もっと前に、私は頂点バッファオブジェクトについて学びました。色の変更数を最小限に抑えるために、モデルの三角形を並べ替える必要があるかもしれません。

+0

お返事ありがとうございました。 私が使用している形式は3dsなので、glvertexを使ってレンダリングする方法は本当にわかりません。 任意の点またはリンクが歓迎されています:) –

+3

@彼はイミディエイトモード(glVertex呼び出し)を使用している場合、GPU上でメモリが不足することはありません。また、350kの三角形はかなり丈夫です。 OpenGLのメモリ不足は、システムメモリ(GPU RAM + CPU RAM +スワップ)を使い果たすことを意味します。 – datenwolf

+0

@datenwolf - 彼がロードしているテクスチャはカードにキャッシュされていないのですか、それとも各アップデートでコピーされていますか? –

関連する問題