- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如 this answer 中的建议,我创建了一个线性插值曲线,如下所示:
THREE.Linear3 = THREE.Curve.create(
function ( points, label /* array of Vector3 */) {
this.points = (points == undefined) ? [] : points;
this.label = label;
},
function ( t ) {
var v = new THREE.Vector3();
var c = [];
var points = this.points, point, intPoint, weight;
point = ( points.length - 1 ) * t;
intPoint = Math.floor( point );
weight = point - intPoint;
c[ 1 ] = intPoint;
c[ 2 ] = intPoint > points.length - 2 ? points.length - 1 : intPoint + 1;
var pt1 = points[ c[1] ],
pt2 = points[ c[2] ];
v.copy( pt1 ).lerp( pt2, weight );
return v;
}
);
但是,当我尝试显示不同长度的轨迹(以动画方式)时,我得到以下行为,即曲线不是穿过点,而是穿过空间,请注意在每个轨迹下面的示例应该经过每个球体的坐标(下面的动画 gif):
我不确定我是否理解 getPoint 函数或它应该返回什么。非常感谢任何帮助。
这是一个最小的示例,但您可以看到随着 pipe 的膨胀,右 Angular 有一个颠簸的 Action 。
最佳答案
这有助于我调查问题。
您正在泄漏几何体,您需要在从场景中移除网格后处理几何体
scene.remove(c_mesh)
c_tube && c_tube.dispose();
使用 WebGLRenderer。 Canvas 渲染器 leaks removed objects ,并且您在每一帧上创建新对象。 (如果您由于某种原因无法使用 CanvasRenderer,对不起)
(对于 fiddle )放慢动作,requestAnimationFrame
不是测试所必需的,setTimeout(animate, 500);
允许用户看到发生了什么事。
0 段管有什么意义?
if (index >= points.length - 1){
index = 1; //start with 2 points
}
TubeGeometry 做一管 N(构造函数中的第二个参数, fiddle 中的 16)段。 (我稍后会回过头来,但我不认为你总是想要 16 个片段)
Curve.getPoinAt(TubeGeometry 和可能许多其他几何体使用的方法)的默认行为是返回等距点。您可以预期:distance(getPointAt(0),getPointAt(0.1)) == distance(getPointAt(0.1),getPointAt(0.2))
为真。
由于这些点,无论您在路径中放置多少点,TubeGeometry 都会构建一个 16 段管,所有段的长度都相同,从路径的第一个点到最后一个点. 15 个中间点中的一个恰好位于边缘位置的可能性很小。这应该可以解释您所看到的。
首先摆脱 TubeGeometry+Path 的等距方式。重载 getUtoTmapping
应该就足够了(我发现阅读源代码):
THREE.Linear3.prototype.getUtoTmapping = function(u) {
return u;
};
我改变了你的getPoint
。它可能做同样的事情,但我对我的代码进行调查更舒服
function ( t ) {
var points = this.points;
var index = ( points.length - 1 ) * t;
var floorIndex = Math.floor(index);
if(floorIndex == points.length-1)
return points[floorIndex];
var floorPoint = points[floorIndex];
var ceilPoint = points[floorIndex+1];
return floorPoint.clone().lerp(ceilPoint, index - floorIndex);
}
为 TubeGeometry 构造函数提供正确的段数:
var pathPoints = points.slice(0, index);
c_path = new THREE.Linear3(pathPoints, 'Test');
c_tube = new THREE.TubeGeometry(c_path, pathPoints.length-1, 10, 16, false, true);
此时,您应该大致得到了您所期望的
您应该看到 pipe 始终穿过边缘。您还应该看到 TubeGeometry 并不意味着有 Angular 。您可以通过查看 TubeGeometry 和 Curve 如何处理切线来改善这个 Angular 问题,或者(如果您不关心速度慢的话)通过将段数增加到非常大的数量:
c_tube = new THREE.TubeGeometry(c_path, 200/*pathPoints.length-1*/, 10, 16, false, true);
这就是答案。你可以在这里找到我实验的最新版本:http://jsfiddle.net/dqn73m98/5/ .您还可以询问 three.js 开发人员是否存在这样的功能,或者在 github 问题中请求实现(如果有人有时间这样做),here
关于javascript - 自定义 THREE.Curve.create 显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085061/
当我用 g++ 编译时出现以下错误: Parser.cpp:(.text+0x2478): 未定义对“Curve::Curve()”的引用 Parser.cpp 的标题如下: #include "Be
问题 假设我知道希尔伯特曲线面和四叉树,例如 4/032212303102122 (第 4 面,第 15 层)。 或者我可能知道 S2 Geometry CellId,例如 9749618424903
我正在尝试将文本包裹在贝塞尔曲线中,并遵循此链接中的教程,http://www.planetclegg.com/projects/WarpingTextToSplines.html 我通过此代码获得衍
如果我有一组来 self 扫描的黑白图像的点。 它看起来像一条曲线,我想使用这些点的三次贝塞尔曲线来模拟一条平滑的曲线。 如何确定起点、2 个控制点和终点? 从图像中可以模拟出几条三次贝塞尔曲线,但我
我想将具有已知端点(p0 和 p3)的贝塞尔曲线拟合到嘈杂的二维数据。这似乎比传统的 4 点贝塞尔曲线拟合更简单,但我仍然难以弄清楚。 有人可以指出我现有的代码或算法来找到控制点 p1 和 p2 的最
我正在尝试使用 B 样条曲线拟合。 B样条曲线的阶数为4。当我有很多控制点时,它工作得很好。但是,如果控制点的数量很少,比如两个,我的程序就会崩溃。我意识到控制点的数量与结的数量和顺序有关。谁能帮我澄
我有三个形成抛物线的 X/Y 点。我只需要计算通过这三个点的抛物线顶点是多少。最好是一种快速的方法,因为我必须做很多这些计算! “Ask A Scientist”网站提供this answer : T
我想绘制 x 的函数,其中 x 应用于向量。无论如何,最简单的是举一个简单的例子: var <- c(1,2,3) curve(mean(var)+x) curve(mean(var+x)) 虽然第一
一位同事问我这个问题,我一直在努力解决这个问题。 假设我想定义一个函数,它接受一个表达式(具体来说,假设为 x^2)作为参数,并将该参数传递给 curve()。 如果我想以简单的方式做到这一点,我只需
我想绘制 x 的函数,其中 x 应用于向量。无论如何,最简单的是举一个简单的例子: var <- c(1,2,3) curve(mean(var)+x) curve(mean(var+x)) 虽然第一
ECDSA算法中256位EC key 的签名长度将是多少? 我想验证签名长度是否相同。如果某个机构可以帮助我设置一个EC key ,那将是很棒的。 最佳答案 这取决于您如何对签名进行编码。这是来自Op
我有以下代码生成四个图,但它们最终被压扁(见下图)。我该如何解决这个问题? par(mfrow=c(2,2)) curve(.5*exp(-.5*x),from=0,to=10,main="f(x)"
我编写了一个程序,它处理当前资源到几何图形表面的欧氏距离。在我们的几何考虑中,y 坐标始终为零 - 因此它在 x 和 z 维度上是一个二维结构。该图显示了它的外观: (length yellow =
为什么curve似乎不适用于从列表中提取的元素? 考虑两个看似相同的函数,但构建方式不同: a curve(m[[1]]) Error in curve(m[[1]]) : 'expr' mus
我有一个公式作为字符向量,并希望在曲线中使用它。 curve(-8*cos(2*x), 0, 10) #works as expected formula <- "-8*cos(2*x)" # not
为什么curve似乎不适用于从列表中提取的元素? 考虑两个看似相同的函数,但构建方式不同: a curve(m[[1]]) Error in curve(m[[1]]) : 'expr' mus
是否可以循环动画此图像? 我试图通过创建一个相对父级并将每个图像设置为动画(业务解决方案 div、it 解决方案 div、生命周期解决方案 div 和教育解决方案 div 为绝对)。我使用了这段代码,
如何在Flex中弯曲我的文本小部件?我有一个被文本包围的圆圈,我需要为文本创建这个样式。另外,这个圆圈占屏幕宽度的50%,所以这个曲线效果也应该是动态的
我怎样才能弯曲一张纸(立方体)?我想控制弯曲/曲线的角度。 例如 立方体([50,50,2]); 最佳答案 您可以 rotate_extrude()一个带有参数角的矩形。这需要 openscad 版本
我正在尝试寻找一种聪明的方法来创建像下一个一样的曲线(使用 Unity3d 2D 部分(不使用网格对撞机))),但我没有找到 任何帮助,将不胜感激。 最佳答案 看到最后一个答案(已删除)不符合我的要求
我是一名优秀的程序员,十分优秀!