0

我有一个带有标记和顶点的形状库,它们是函数并且想要创建一个 3-D 半球体。但我在这方面遇到了麻烦。请参见下面的示例 3-D 球体函数。如何以相同的方式创建 3-D 半球面函数?请帮忙!

sphere: function (spherical) {
    var radius = 0.5,
        theta = Math.PI,
        phi = 2 * Math.PI,
        latLines = 30,
        longLines = 30,
        currentLat,
        currentLong,
        currentVertex,
        currentIndex,
        vertices = [],
        indices = [],
        finalResult = {},
        i,
        j,
        t,
        m;

    for (i = 0; i < (latLines + 1); i += 1) {
        currentLat = i * theta / latLines;
        for (j = 0; j < (longLines + 1); j += 1) {
            currentVertex = latLines * i + j;

            vertices[currentVertex] = [];
            currentLong = j * phi / longLines;

            vertices[currentVertex][0] = radius * Math.sin(currentLat) * Math.cos(currentLong);
            vertices[currentVertex][1] = radius * Math.cos(currentLat);
            vertices[currentVertex][2] = radius * Math.sin(currentLat) * Math.sin(currentLong);
            if (spherical) {
                vertices[currentVertex][0] *= (currentLat * spherical);
                vertices[currentVertex][2] *= (currentLat * spherical);
            }
        }
    }

    for (t = 0; t < (latLines + 1); t += 1) {
        for (m = 0; m < (longLines + 1); m += 1) {
            currentIndex = 2 * ((latLines + 1) * t + m);

            indices[2 * ((latLines + 1) * t + m)] = [];
            indices[2 * ((latLines + 1) * t + m) + 1] = [];

            indices[currentIndex][0] = longLines * t + m;
            indices[currentIndex][1] = longLines * t + m + 1;
            indices[currentIndex][2] = longLines * (t + 1) + m;

            currentIndex += 1;

            indices[currentIndex][0] = longLines * (t + 1) + m;
            indices[currentIndex][1] = longLines * (t + 1) + m + 1;
            indices[currentIndex][2] = longLines * t + m + 1;
        }
    }

    finalResult.vertices = vertices;
    finalResult.indices = indices;
    return finalResult;
},
4

0 回答 0