我想创建一个 500x500 的网格,并且我希望它能够在某些地方弯曲(将其视为由于重力而弯曲的时空平面)。我一开始就卡住了。
这是我在文档中找到的:
// Create a sine-like wave
const curve = new THREE.SplineCurve( [
new THREE.Vector2( -10, 0 ),
new THREE.Vector2( -5, 5 ),
new THREE.Vector2( 0, 0 ),
new THREE.Vector2( 5, -5 ),
new THREE.Vector2( 10, 0 )
] );
const points = curve.getPoints( 50 );
const geometry = new THREE.BufferGeometry().setFromPoints( points );
const material = new THREE.LineBasicMaterial( { color : 0xff0000 } );
// Create the final object to add to the scene
const splineObject = new THREE.Line( geometry, material );
我认为这应该有效,但没有。我不知道如何从这里创建多行。我试图处理一些数组,但我不知道在哪里或如何处理。我已经完成了我的研究,但我无法取得任何进展。
我还有一个问题:这是一个 Vector2
我需要将它设为 3d 才能完成这项工作吗?还有很多其他类,如 CatmullRomCurve3
、CubicBezierCurve3
等,但问题仍然是我需要创建一个数组来创建所有向量和线。
-- 编辑我为网格线创建了一个代码,但曲线问题仍然相同
let size = 12, step = 1;
const geometry = new THREE.BufferGeometry();
// create a simple square shape. We duplicate the top left and bottom right
// vertices because each vertex needs to appear once per triangle.
const vertices = [];
for(var i = - size; i <= size; i += step) {
vertices.push( - size, - 0.4, i);
vertices.push( size, - 0.4, i);
vertices.push( i, - 0.4, - size);
vertices.push( i, - 0.4, size);
}
let positionAttribute = new THREE.Float32BufferAttribute(vertices, 3);
geometry.setAttribute("position", positionAttribute);
let lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial());