在three.js中,PolyhedronGeometry()无法工作

时间:2017-05-19 07:10:31

标签: three.js

我想使用TetrahedronGeometry创建polyedronGeometry(),但它无法正常工作,场景中没有任何内容。

var vertices = [
    [1, 0, 1],
    [1, 0, -1],
    [-1, 0, -1],
    [-1, 0, 1],
    [0, 1, 0]
];
var faces = [
    [0, 1, 2, 3],
    [0, 1, 4],
    [1, 2, 4],
    [2, 3, 4],
    [3, 0, 4]
];

var geometry = new THREE.PolyhedronGeometry(vertices, faces);
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

1 个答案:

答案 0 :(得分:1)

首先请看the documentation for PolyhedronGeometry。发送面/顶点时没有遵循规范。

Vertices作为参数应该是一个浮点数组,而不是一个数组数组。所以[[#.#,#.#,#.#],[....]]不正确,因为Vertices的每个条目都是数组,而不是浮点数。但[#,#,#,#,#,#,#, .....]会奏效。同样适用于faces,它将[0,1,2,1,2,3,2,3,4]视为3个单独的面。你不需要将它们分解成自己的数组。

第二次,您尝试将四边形滑入需要三角形的faces。因此,您需要将[0, 1, 2, 3]分解为0,1,2,1,2,3

第三次,你没有在PolyhedronGeometry中定义大小,我认为它默认为1应该没问题,但是如果你正在制作一个大/小的场景缩放您可能需要自己设置它以确保它可见并且相机不在其中。我无法看到你的相机定义,所以这可能是一个因素。

上次,为了进行调试,我会更改

new THREE.MeshBasicMaterial({color: 0x00ff00});

有:

new THREE.MeshBasicMaterial({color: 0x00ff00,side:THREE.DoubleSide});

这样,如果你的上弦顺序不正确,你至少可以看到你是否正在创建正确的几何和面。一旦你在屏幕上有东西,那么你可以关闭双打并调试绕组。