0

こんにちは、私は本当に困っています。現在、Frank d Luna http://www.d3dcoder.net/d3d11.htmによる DirectX11 を使用した DirectX11 チュートリアル Shapes example in 3d game programming を行っています。最初の立方体とは別に配置できる 2 つ目の立方体を作成し、プロジェクトをビルドすると、両方の立方体が消えてしまいました。問題はジオメトリ ジェネレーターにあると思います。

助けてください :(

    void ShapesApp::BuildGeometryBuffers()

{ GeometryGenerator::MeshData ボックス;

//added
GeometryGenerator::MeshData boxtwo;


GeometryGenerator::MeshData grid;
GeometryGenerator::MeshData sphere;
GeometryGenerator::MeshData cylinder;

GeometryGenerator geoGen;

geoGen.CreateBox(1.0f, 1.0f, 1.0f, box);

geoGen.CreateBox(1.0f, 1.0f, 1.0f, boxtwo);
geoGen.CreateGrid(20.0f, 30.0f, 60, 40, grid);
geoGen.CreateSphere(0.5f, 20, 20, sphere);
//geoGen.CreateGeosphere(0.5f, 2, sphere);
geoGen.CreateCylinder(0.5f, 0.3f, 3.0f, 20, 20, cylinder);

// Cache the vertex offsets to each object in the concatenated vertex buffer.
//added


mBoxVertexOffset      = 0;
mBoxtwoVertexOffset = box.Vertices.size();
mGridVertexOffset     = mBoxtwoVertexOffset + boxtwo.Vertices.size();
mSphereVertexOffset   = mGridVertexOffset + grid.Vertices.size();
mCylinderVertexOffset = mSphereVertexOffset + sphere.Vertices.size();



// Cache the index count of each object.

mBoxIndexCount      = box.Indices.size();
//added
mBoxtwoIndexCount   = boxtwo.Indices.size();
mGridIndexCount     = grid.Indices.size();
mSphereIndexCount   = sphere.Indices.size();
mCylinderIndexCount = cylinder.Indices.size();


// Cache the starting index for each object in the concatenated index buffer.
mBoxIndexOffset      = 0;
//added
mBoxtwoIndexOffset      = mBoxIndexCount;
mGridIndexOffset     = mBoxtwoIndexOffset + mBoxtwoIndexCount;
mSphereIndexOffset   = mGridIndexOffset + mGridIndexCount;
mCylinderIndexOffset = mSphereIndexOffset + mSphereIndexCount;



UINT totalVertexCount = 

    box.Vertices.size() + 
    //added
    boxtwo.Vertices.size() + 
    grid.Vertices.size() + 
    sphere.Vertices.size() +
    cylinder.Vertices.size();

UINT totalIndexCount = 
    mBoxIndexCount + 
    //added
mBoxtwoIndexCount + 
    mGridIndexCount + 
    mSphereIndexCount +
    mCylinderIndexCount;
4

1 に答える 1

0

あなたは最初の部分を正しく行ったようですが、それだけではありません。

  • 次に、2番目のボックスの頂点位置を追加する必要があります
  • 2番目のボックスのインデックスをVectorIndexBufferに挿入します
  • 2番目のボックスを描画するコードを追加します
  • 2番目のボックスワールドマトリックスを作成して配置します

この章をもう一度読むことをお勧めします。各章を完全に理解し、次に進む前にサンプルを正しく変更できることが非常に重要です。そうしないと、前の章で多くの問題が発生します。

これは、2番目のボックスを追加するコード変更のパッチです。

    --- D:/MyStuff/Book Files/Frank Luna/DVD/Code/Chapter 6 Drawing in Direct3D/Shapes/ShapesDemoOriginal.cpp   Mon May 09 22:10:02 2011
    +++ D:/MyStuff/Book Files/Frank Luna/DVD/Code/Chapter 6 Drawing in Direct3D/Shapes/ShapesDemo.cpp   Fri Jan 11 12:37:54 2013
    @@ -58,0 +59 @@
    +   XMFLOAT4X4 mBoxWorld2;
    @@ -65,0 +67 @@
    +   int mBoxVertexOffset2;
    @@ -70,0 +73 @@
    +   UINT mBoxIndexOffset2;
    @@ -75,0 +79 @@
    +   UINT mBoxIndexCount2;
    @@ -122,0 +127,4 @@
    +   XMMATRIX boxScale2 = XMMatrixScaling(1.0f, 1.0f, 1.0f);
    +   XMMATRIX boxOffset2 = XMMatrixTranslation(2.0f, 0.5f, 0.0f);
    +   XMStoreFloat4x4(&mBoxWorld2, XMMatrixMultiply(boxScale2, boxOffset2));
    +
    @@ -226,0 +235,6 @@
    +       
    +       // Draw the box2.
    +       world = XMLoadFloat4x4(&mBoxWorld2);
    +       mfxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&(world*viewProj)));
    +       mTech->GetPassByIndex(p)->Apply(0, md3dImmediateContext);
    +       md3dImmediateContext->DrawIndexed(mBoxIndexCount2, mBoxIndexOffset2,         mBoxVertexOffset2);
    @@ -303,0 +318 @@
    +   GeometryGenerator::MeshData box2;
    @@ -309,0 +325 @@
    +   geoGen.CreateBox(1.0f, 1.0f, 1.0f, box2);
    @@ -317 +333,2 @@
    -   mGridVertexOffset     = box.Vertices.size();
    +   mBoxVertexOffset2     = box.Vertices.size();
    +   mGridVertexOffset     = box.Vertices.size() + box2.Vertices.size();
    @@ -322,0 +340 @@
    +   mBoxIndexCount2     = box2.Indices.size();
    @@ -329 +347,2 @@
    -   mGridIndexOffset     = mBoxIndexCount;
    +   mBoxIndexOffset2     = mBoxIndexCount;
    +   mGridIndexOffset     = mBoxIndexOffset2 + mBoxIndexCount2;
    @@ -334,0 +354 @@
    +       box2.Vertices.size() + 
    @@ -340,0 +361 @@
    +       mBoxIndexCount2 + 
    @@ -360,0 +382,6 @@
    +   for(size_t i = 0; i < box2.Vertices.size(); ++i, ++k)
    +   {
    +       vertices[k].Pos   = box2.Vertices[i].Position;
    +       vertices[k].Color = black;
    +   }
    +
    @@ -394,0 +422 @@
    +   indices.insert(indices.end(), box2.Indices.begin(), box2.Indices.end());
于 2013-01-11T19:04:00.453 に答える