如何使用ThreeJs创建一个由每边6亿个迷你立方体组成的立方体?

时间:2017-04-06 11:53:46

标签: javascript three.js webgl

我想在游戏中重新创建一个立方体好奇心立方体里面的东西是什么?每边有6亿个迷你立方体。我不能使用纹理来模拟我的迷你立方体,因为当我点击它时,迷你立方体必须有视觉上的变化。

我尝试了一个BoxGeometry()对象,其中有2个面作为迷你立方体

    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    var renderer = new THREE.WebGLRenderer({
        alpha: true
    });
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    //There is my cube
    var geometry = new THREE.BoxGeometry(20, 20, 20, 24494, 24494, 24494);
    var material = new THREE.MeshBasicMaterial({
        color: 0xfd59d7
    });

    var cube = new THREE.Mesh(geometry, material);
    scene.add(cube);

    camera.position.z = 100;

    render();

    function render() {
        renderer.render(scene, camera);
    }

那么我怎样才能创建一个每边有600万个迷你立方体的立方体,可以在笔记本上呈现?

1 个答案:

答案 0 :(得分:2)

我可以向你保证,好奇号实际上并没有显示每边600,000,000个立方体制成的立方体。目前没有GPU能够以平滑的帧速率绘制600,000,000个立方体。如上所述,每侧有72亿个三角形。你可以同时看到一个立方体的3个面,所以30fps,即每秒6480亿个三角形。即使是NVidia 1080 GT(2017年接近顶级性能卡)也只能每秒绘制理论上110亿个三角形,这只是理论上的。实际上它永远不会达到那个速度。

最好在好奇号中,当你可以看到整个立方体时,它只显示一个带有纹理的12个多边形立方体,其中一个像素代表多于1个立方体(如果每边确实有600,000,000个立方体),因为它需要纹理24494x24494。 That's 5x to 10x what any phone can display in a single texture。是的,您可以将立方体的面细分为较小的多边形,每个多边形使用不同的纹理。这将需要2.3gig纹理PER侧或13.4gig内存用于整个立方体。手机没有13.4 gig的记忆。

如果它真的是每面6亿个立方体,你可以做的最好的就是谷歌地图,其中所有数据都存储在服务器上,各种表示都流式传输给用户。当用户缩小以查看整个立方体时,会显示一些表示每边1024x1024(100万像素)的图像,当您放大显示较小部分立方体的不同表示时,会下载并显示。