为threejs创建一个弯曲的网格

时间:2021-03-18 07:51:19

标签: javascript node.js typescript three.js

我想创建一个 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 才能完成这项工作吗?还有很多其他类,如 CatmullRomCurve3CubicBezierCurve3 等,但问题仍然是我需要创建一个数组来创建所有向量和线。

-- 编辑我为网格线创建了一个代码,但曲线问题仍然相同

    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());

0 个答案:

没有答案
相关问题