2010-11-24 7 views
2

私は幅と高さが与えられた長方形のメッシュを生成するIrrlichtコードをいくつか持っています。ここで、頂点及びインデックスを生成するコードは、次のとおりこのメッシュでバウンディングボックスが正しく設定されていないのはなぜですか?

int iNumVertices = (width + 1) * (height + 1); 
S3DVertex * vertices = new S3DVertex[iNumVertices]; 
memset(vertices,0,sizeof(S3DVertex) * iNumVertices); 

for(int i=0;i<=height;++i) 
{ 
    for(int j=0;j<=width;++j) 
    { 
     int iIndex = (i*(width + 1)) + j; 

     vertices[iIndex].Pos.X = i * 2.0f; 
     vertices[iIndex].Pos.Y = 0.0f; 
     vertices[iIndex].Pos.Z = j * 2.0f; 
     vertices[iIndex].Color.color = 0xFFFFFFFF; 

     vertices[iIndex].TCoords.X = i; 
     vertices[iIndex].TCoords.Y = j; 
    } 
} 

int iNumIndices = 6 * width * height; 
u16 * indices = new u16[iNumIndices]; 

for(int i=0;i<height;++i) 
{ 
    for(int j=0;j<width;++j) 
    { 
     int iIndex = ((i*width) + j) * 6; 

     int tmp_offset = j + (i * (width + 1)); 

     indices[iIndex + 0] = tmp_offset + 1; 
     indices[iIndex + 1] = tmp_offset + width + 1; 
     indices[iIndex + 2] = tmp_offset; 
     indices[iIndex + 3] = tmp_offset + 1; 
     indices[iIndex + 4] = tmp_offset + width + 2; 
     indices[iIndex + 5] = tmp_offset + width + 1; 
    } 
} 

次に頂点およびインデックスはメッシュに追加され、バウンディングボックスが再計算される:

SMeshBuffer * buffer = new SMeshBuffer(); 
buffer->append(vertices,iNumVertices,indices,iNumIndices); 

buffer->recalculateBoundingBox(); 

しかし、レンダリングされたときに、境界ボックスが

alt text

これの最終結果は、メッシュがレンダリングされないということであるSMA:適切なサイズにどこにも近く、カメラの背後にバウンディングボックスがあります。

+0

どのように 'width'と' height'を計算していますか? – casablanca

+0

@casablanca:パラメータとして渡されたばかりです。この場合、[25x10]。 –

答えて

1

メッシュの代わりにバッファにrecalculateBoundingBox()と呼んでいたという問題がありました。

関連する問題