Javascript 如何将Three.js ConvexGeometry更改为非凸几何体?

Javascript 如何将Three.js ConvexGeometry更改为非凸几何体?,javascript,3d,three.js,Javascript,3d,Three.js,我以前使用过Three.JS,但不是在网格上。我想我正在以正确的方式处理我的问题,但我不确定 目标 我正在尝试制作一个具有特定垂直方向的3D块状对象。垂直方向是固定的,但其中心半径不同。你可以想象它有点像一个音频均衡器,除了径向和三维 我愿意放弃这种方法,如果有更简单的方法,我会选择完全不同的方法 当前进度 我照我的需要把它拿去清洗/修改了。以下是HTML和JavaScript: HTML(disco ball.HTML) 我错过了什么 你可以看到“球”上有两个点,我把半径增加了一倍(大钉子)。

我以前使用过Three.JS,但不是在网格上。我想我正在以正确的方式处理我的问题,但我不确定

目标

我正在尝试制作一个具有特定垂直方向的3D块状对象。垂直方向是固定的,但其中心半径不同。你可以想象它有点像一个音频均衡器,除了径向和三维

我愿意放弃这种方法,如果有更简单的方法,我会选择完全不同的方法

当前进度

我照我的需要把它拿去清洗/修改了。以下是HTML和JavaScript:

HTML(
disco ball.HTML

我错过了什么

  • 你可以看到“球”上有两个点,我把半径增加了一倍(大钉子)。当然,因为我使用的是凸几何,所以形状是凸的。。。所以很多点是隐藏的。什么样的?我可以使用非凸几何体使这些点不再隐藏吗
  • 我想对网格进行一点细分,使其不再是简单的顶点到顶点,而是更加平滑。我该怎么做(钉子少刺多泡)
  • 我想修改网格,使不同的点每隔几秒钟刺入不同的量(我有一些数据数组描述了刺入量)。制作几何体后,如何修改几何体?理想情况下,使用某种粗花呢,但我可以不使用,这非常困难=)
  • 谢谢

    平滑网格并设置其动画。 三是提供了大量的选择。这些只是建议,你最好的办法就是阅读这些建议,找到适合你的

    网格只是一组3D点和一组描述每个三角形的索引。构建网格后,只需更新顶点,并让三个顶点更新着色器属性和网格法线

    你的问题 Q1。用于网格

    Q2.在构建网格时,您可以使用曲线辅助工具,例如或您的最佳选择

    另一个选项是使用修改器创建简单网格,然后让三个修改器为您细分网格。乙二醇

    虽然不是最快的解决方案,但如果垂直计数较低,它将在每帧执行此操作,而不会丢失任何帧速率

    Q3。使用可以设置网格,即顶点数组

    另一种选择是使用修饰符,例如

    也可以在每个帧中直接修改顶点

    for ( var i = 0, l = geometry.vertices.length; i < l; i ++ ) {
        geometry.vertices[ i ].x = ?;
        geometry.vertices[ i ].y = ?;
        geometry.vertices[ i ].z = ?;
    }
    mesh.geometry.verticesNeedUpdate = true;
    
    然后,对于每个加权点,您可以找到新的增量并更新位置

       // do for x,y,z
       x = (p2.x - p1.x);  // these points are updated every frame
    
       // get the new pw1 vert target position
       x = p1.x + x * w;
    
       // get new delta
       pw1.dx += (x - pw1.x) * pw1.wa; // set delta
       pw1.dx *= pw1.wd;
    
       // set new position
       pw1.x += pw1.dx;
    
    对所有加权点执行此操作,然后设置几何体。顶点

    wa
    wd
    系数将改变平滑的行为,您必须根据自己的喜好使用这些值。必须
    0平滑并设置网格动画。
    三是提供了大量的选择。这些只是建议,你最好的办法就是阅读这些建议,找到适合你的

    网格只是一组3D点和一组描述每个三角形的索引。构建网格后,只需更新顶点,并让三个顶点更新着色器属性和网格法线

    你的问题 Q1。用于网格

    Q2.在构建网格时,您可以使用曲线辅助工具,例如或您的最佳选择

    另一个选项是使用修改器创建简单网格,然后让三个修改器为您细分网格。乙二醇

    虽然不是最快的解决方案,但如果垂直计数较低,它将在每帧执行此操作,而不会丢失任何帧速率

    Q3。使用可以设置网格,即顶点数组

    另一种选择是使用修饰符,例如

    也可以在每个帧中直接修改顶点

    for ( var i = 0, l = geometry.vertices.length; i < l; i ++ ) {
        geometry.vertices[ i ].x = ?;
        geometry.vertices[ i ].y = ?;
        geometry.vertices[ i ].z = ?;
    }
    mesh.geometry.verticesNeedUpdate = true;
    
    然后,对于每个加权点,您可以找到新的增量并更新位置

       // do for x,y,z
       x = (p2.x - p1.x);  // these points are updated every frame
    
       // get the new pw1 vert target position
       x = p1.x + x * w;
    
       // get new delta
       pw1.dx += (x - pw1.x) * pw1.wa; // set delta
       pw1.dx *= pw1.wd;
    
       // set new position
       pw1.x += pw1.dx;
    
    对所有加权点执行此操作,然后设置几何体。顶点


    wa
    wd
    系数将改变平滑的行为,您必须根据自己的喜好使用这些值。必须是
    0,谢谢。其中一些是我无法理解的(也就是说,需要比我现在更多的3J知识),但我正在努力解决它。我很想花点时间看一下这些文件,但我有一个最后期限,也就是说,我会继续努力的。谢谢。其中一些是我无法理解的(也就是说,需要比我现在更多的3J知识),但我正在努力解决它。我很想花点时间看一下这些文件,但我有一个最后期限,也就是说,我会继续努力。
    
       // do for x,y,z
       x = (p2.x - p1.x);  // these points are updated every frame
    
       // get the new pw1 vert target position
       x = p1.x + x * w;
    
       // get new delta
       pw1.dx += (x - pw1.x) * pw1.wa; // set delta
       pw1.dx *= pw1.wd;
    
       // set new position
       pw1.x += pw1.dx;