【问题标题】:in three.js, PolyhedronGeometry() failed to work在三个.js 中,PolyhedronGeometry() 无法工作
【发布时间】:2017-05-19 23:54:57
【问题描述】:

我想用polyedronGeometry()创建一个TetrahedronGeometry,但是没有成功,场景中什么都没有。

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);

【问题讨论】:

  • 在什么意义上无法工作?编辑帖子以添加详细信息。
  • 控制台日志中有错误信息吗?考虑到documentation,您的顶点和面数组似乎应该是一维的。

标签: three.js


【解决方案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});

因此,以防万一您的缠绕顺序不正确,您至少可以查看是否创建了正确的几何图形和面。屏幕上有东西后,您可以关闭双面并调试绕组。

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 2016-09-06
    • 2020-12-14
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2019-10-05
    • 2013-04-01
    相关资源
    最近更新 更多