THREE.js 部分球体几何给出了两个段,其中一个段是预期的

Posted

技术标签:

【中文标题】THREE.js 部分球体几何给出了两个段,其中一个段是预期的【英文标题】:THREE.js partial sphere geometry gives two segments where one segment expected 【发布时间】:2015-05-18 00:16:49 【问题描述】:

我正在尝试使用 THREE.SphereGeometry 构造函数的扩展选项制作部分球体几何形状,例如

    // material
    var dish_material = new THREE.MeshLambertMaterial( 
        color: 0x00ffff, 
        side: THREE.DoubleSide,
        ambient: 0x00ffff,
        shading: THREE.FlatShading,
        transparent: true,
        opacity: 0.7,
     );

    var segment_material = new THREE.MeshLambertMaterial( 
        color: 0xffff00, 
        side: THREE.DoubleSide,
        ambient: 0x00ffff,
        shading: THREE.FlatShading,
        transparent: true,
        opacity: 0.7,
     );    

    // geometries
    var dish_geometry = new THREE.SphereGeometry(radius=5, widthSegments=16, heightSegments=16, 
phiStart=0, phiLength=Math.PI*2, 
thetaStart=Math.PI, thetaLength=Math.PI/4);

    var segment_geometry = new THREE.SphereGeometry(radius=5, widthSegments=16, heightSegments=16, 
phiStart=0, phiLength=Math.PI/4, 
thetaStart=0, thetaLength=Math.PI*2);

    // meshes
    dish = new THREE.Mesh( dish_geometry, dish_material );
    scene.add( dish );

    segment = new THREE.Mesh( segment_geometry, segment_material );
    scene.add( segment );

这是使用上述代码的JSFiddle。

“dish”对象(蓝色)看起来如预期。

但是“段”对象(黄色)有两个段,而我原本预计只有一个段。

我的问题

这个“双段”是预期的几何形状吗?

【问题讨论】:

【参考方案1】:

您指定了 thetaLength=Math.PI*2,这将产生一个完整的圆圈。如果旋转该圆圈,您将获得您描述的几何图形。

我想你会想改写 thetaLength=Math.PI。

【讨论】:

啊,谢谢,thetaLength=Math.PI 正是我所需要的。更新JSFiddle。

以上是关于THREE.js 部分球体几何给出了两个段,其中一个段是预期的的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 的球体几何位置

Three.js - 将自定义几何移动到原点

three.js 几何体-组合网格

当鼠标悬停(悬停)在对象上时,鼠标光标应该改变(three.js)

SphereBufferGeometry 上的 THREE.js ShaderMaterial UV 包裹问题

threejs学习day3:几何形状