0

草のライブ壁紙をめくってから、次のコードを見つけました。草の葉のメッシュを作成し、インデックスを設定します。

private void createMesh() {
    mVertexBuffer = new ScriptField_Vertex(mRS, mVerticies * 2);

    final Mesh.AllocationBuilder meshBuilder = new Mesh.AllocationBuilder(mRS);
    meshBuilder.addVertexAllocation(mVertexBuffer.getAllocation());

    mBladesIndicies = Allocation.createSized(mRS, Element.U16(mRS), mIndicies);
    meshBuilder.addIndexSetAllocation(mBladesIndicies, Primitive.TRIANGLE);

    mBladesMesh = meshBuilder.create();

    short[] idx = new short[mIndicies];
    int idxIdx = 0;
    int vtxIdx = 0;
    for (int i = 0; i < mBladeSizes.length; i++) {
        for (int ct = 0; ct < mBladeSizes[i]; ct ++) {
            idx[idxIdx + 0] = (short)(vtxIdx + 0);
            idx[idxIdx + 1] = (short)(vtxIdx + 1);
            idx[idxIdx + 2] = (short)(vtxIdx + 2);
            idx[idxIdx + 3] = (short)(vtxIdx + 1);
            idx[idxIdx + 4] = (short)(vtxIdx + 3);
            idx[idxIdx + 5] = (short)(vtxIdx + 2);
            idxIdx += 6;
            vtxIdx += 2;
        }
        vtxIdx += 2;
    }

    mBladesIndicies.copyFrom(idx);
}

私はこの2行に困惑しています:meshBuilder.addIndexSetAllocation(mBladesIndicies, Primitive.TRIANGLE);そして、変数が実際に彼のデータを取得する前に、mBladesIndicies.copyFrom(idx); なぜmBladesIndiciesメッシュビルダーに送信してメッシュを作成するのですか?mBladesIndiciesmBladesIndicies.copyFrom(idx);

要するに、なぜmeshBuilder.addIndexSetAllocation(mBladesIndicies, Primitive.TRIANGLE);そしてBEFOREmBladesMesh = meshBuilder.create();に来るのですか? mBladesIndicies.copyFrom(idx);

4

1 に答える 1

1

割り当ては、コピーではなく参照によってメッシュに接続されます。このため、データが追加される順序は重要ではありません。

Mesh.Builder は、作成後に割り当て参照を保持します。

于 2013-02-28T18:12:02.507 に答える