コード例 #1
0
ファイル: SubChunk.cs プロジェクト: mcnuttys/MarchingCubes
    public void ComputeCube()
    {
        cubeIndex = 0;
        if (nodes[0].weight > 0)
        {
            cubeIndex += 1;
        }
        if (nodes[1].weight > 0)
        {
            cubeIndex += 2;
        }
        if (nodes[2].weight > 0)
        {
            cubeIndex += 4;
        }
        if (nodes[3].weight > 0)
        {
            cubeIndex += 8;
        }
        if (nodes[4].weight > 0)
        {
            cubeIndex += 16;
        }
        if (nodes[5].weight > 0)
        {
            cubeIndex += 32;
        }
        if (nodes[6].weight > 0)
        {
            cubeIndex += 64;
        }
        if (nodes[7].weight > 0)
        {
            cubeIndex += 128;
        }
        if (cubeIndex > 0 && cubeIndex <= 255)
        {
            active = true;
        }

        if (active)
        {
            // Using the nodes compute the antinodes (The antinodes are going to be the vertex positions of the mesh)...
            antiNodes    = new AntiNode[12];
            antiNodes[0] = new AntiNode(Vector3.Lerp(nodes[0].pos, nodes[1].pos, Interpolate(nodes[0], nodes[1])));
            antiNodes[1] = new AntiNode(Vector3.Lerp(nodes[1].pos, nodes[2].pos, Interpolate(nodes[1], nodes[2])));
            antiNodes[2] = new AntiNode(Vector3.Lerp(nodes[2].pos, nodes[3].pos, Interpolate(nodes[2], nodes[3])));
            antiNodes[3] = new AntiNode(Vector3.Lerp(nodes[3].pos, nodes[0].pos, Interpolate(nodes[3], nodes[0])));

            antiNodes[4] = new AntiNode(Vector3.Lerp(nodes[4].pos, nodes[5].pos, Interpolate(nodes[4], nodes[5])));
            antiNodes[5] = new AntiNode(Vector3.Lerp(nodes[5].pos, nodes[6].pos, Interpolate(nodes[5], nodes[6])));
            antiNodes[6] = new AntiNode(Vector3.Lerp(nodes[6].pos, nodes[7].pos, Interpolate(nodes[6], nodes[7])));
            antiNodes[7] = new AntiNode(Vector3.Lerp(nodes[7].pos, nodes[4].pos, Interpolate(nodes[7], nodes[4])));

            antiNodes[8]  = new AntiNode(Vector3.Lerp(nodes[0].pos, nodes[4].pos, Interpolate(nodes[0], nodes[4])));
            antiNodes[9]  = new AntiNode(Vector3.Lerp(nodes[1].pos, nodes[5].pos, Interpolate(nodes[1], nodes[5])));
            antiNodes[10] = new AntiNode(Vector3.Lerp(nodes[2].pos, nodes[6].pos, Interpolate(nodes[2], nodes[6])));
            antiNodes[11] = new AntiNode(Vector3.Lerp(nodes[3].pos, nodes[7].pos, Interpolate(nodes[3], nodes[7])));
        }
    }
コード例 #2
0
    public void ComputeCube()
    {
        // Using the nodes compute the antinodes (The antinodes are going to be the vertex positions of the mesh)...
        antiNodes    = new AntiNode[12];
        antiNodes[0] = new AntiNode(Vector3.Lerp(nodes[0].pos, nodes[1].pos, Mathf.Clamp01(-nodes[0].weight / (nodes[1].weight - nodes[0].weight))));
        antiNodes[1] = new AntiNode(Vector3.Lerp(nodes[1].pos, nodes[2].pos, Mathf.Clamp01(-nodes[1].weight / (nodes[2].weight - nodes[1].weight))));
        antiNodes[2] = new AntiNode(Vector3.Lerp(nodes[2].pos, nodes[3].pos, Mathf.Clamp01(-nodes[2].weight / (nodes[3].weight - nodes[2].weight))));
        antiNodes[3] = new AntiNode(Vector3.Lerp(nodes[3].pos, nodes[0].pos, Mathf.Clamp01(-nodes[3].weight / (nodes[0].weight - nodes[3].weight))));

        antiNodes[4] = new AntiNode(Vector3.Lerp(nodes[4].pos, nodes[5].pos, Mathf.Clamp01(-nodes[4].weight / (nodes[5].weight - nodes[4].weight))));
        antiNodes[5] = new AntiNode(Vector3.Lerp(nodes[5].pos, nodes[6].pos, Mathf.Clamp01(-nodes[5].weight / (nodes[6].weight - nodes[5].weight))));
        antiNodes[6] = new AntiNode(Vector3.Lerp(nodes[6].pos, nodes[7].pos, Mathf.Clamp01(-nodes[6].weight / (nodes[7].weight - nodes[6].weight))));
        antiNodes[7] = new AntiNode(Vector3.Lerp(nodes[7].pos, nodes[4].pos, Mathf.Clamp01(-nodes[7].weight / (nodes[4].weight - nodes[7].weight))));

        antiNodes[8]  = new AntiNode(Vector3.Lerp(nodes[0].pos, nodes[4].pos, Mathf.Clamp01(-nodes[0].weight / (nodes[4].weight - nodes[0].weight))));
        antiNodes[9]  = new AntiNode(Vector3.Lerp(nodes[1].pos, nodes[5].pos, Mathf.Clamp01(-nodes[1].weight / (nodes[5].weight - nodes[1].weight))));
        antiNodes[10] = new AntiNode(Vector3.Lerp(nodes[2].pos, nodes[6].pos, Mathf.Clamp01(-nodes[2].weight / (nodes[6].weight - nodes[2].weight))));
        antiNodes[11] = new AntiNode(Vector3.Lerp(nodes[3].pos, nodes[7].pos, Mathf.Clamp01(-nodes[3].weight / (nodes[7].weight - nodes[3].weight))));

        // Finally compute the cubes cubeIndex
        cubeIndex = 0;
        if (nodes[0].weight > 0)
        {
            cubeIndex += 1;
        }
        if (nodes[1].weight > 0)
        {
            cubeIndex += 2;
        }
        if (nodes[2].weight > 0)
        {
            cubeIndex += 4;
        }
        if (nodes[3].weight > 0)
        {
            cubeIndex += 8;
        }
        if (nodes[4].weight > 0)
        {
            cubeIndex += 16;
        }
        if (nodes[5].weight > 0)
        {
            cubeIndex += 32;
        }
        if (nodes[6].weight > 0)
        {
            cubeIndex += 64;
        }
        if (nodes[7].weight > 0)
        {
            cubeIndex += 128;
        }
    }