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