我的问题如下:
我有两个用THREE.ParametricGeometry
创建的相交曲面。像这样:
我需要画出这两个表面的交点。使用Wolfram | Alpha API我得到交集函数并渲染它。像这样:
但是,正如您所看到的,交叉点网格比两个表面大得多。 所以我虽然可以计算表面边界框的交点(这个交点可以在上图中看到)和“限制”,可以说,交叉点网格到这个框的尺寸。
我已经尝试将交叉点网格的比例属性设置为边界框的尺寸(框的最大值和最小值之间的差值);但这只会使交叉点网格更大。
虽然我怎么能做到这一点?
交叉点网格就像这样创建(ThreeJS r81):
// 'intersections' is an array of mathematical functions in string format.
intersections.forEach(function (value) {
var rangeX = bbox.getSize().x - (bbox.getSize().x * -1);
var rangeY = bbox.getSize().y - (bbox.getSize().y * -1);
var zFunc = math.compile(value); // The parsing is done with MathJS
// 'bbox' is the intersected bounding box.
var meshFunction = function (x, y) {
x = rangeX * x + (bbox.getSize().x * -1);
y = rangeY * y + (bbox.getSize().y * -1);
var scope = {x: x, y: y};
var z = zFunc.eval(scope);
if (!isNaN(z))
return new THREE.Vector3(x, y, z);
else
return new THREE.Vector3();
};
var geometry = new THREE.ParametricGeometry(meshFunction, segments, segments,
true);
var material = new THREE.MeshBasicMaterial({
color: defaults.intersectionColor,
side: THREE.DoubleSide
});
var mesh = new THREE.Mesh(geometry, material);
intersectionMeshes.push(mesh);
// 'intersectionMeshes' is returned and then added to the scene.
});
答案 0 :(得分:2)
我认为缩放交叉点网格不会起作用,因为交叉点会变得不正确。
让我们尝试使用Three.js clipping执行此操作:
renderer.localClippingEnabled
设为true
; new THREE.Plane(new THREE.Vector3(-1,0,0), -bbox.max.x);
)THREE.Material
,其中material.clippingPlanes
是剪裁平面数组; 请注意,对于局部剪切,交叉点网格和曲面网格应共享相同的世界变换。 (将所有这些网格放入THREE.Group
将是合理的。)