【问题标题】:How to render 2D shape of points in three.js如何在three.js中渲染点的二维形状
【发布时间】:2012-09-29 20:16:35
【问题描述】:

如何在 three.js 中渲染点的 2D 形状?我没有找到任何可用的几何图形...我只需要制作位于同一平面上的点的多边形。

形状不适合,因为它只支持 2D 坐标,我需要使用 3D 点...

我正在使用以下代码在 X、Y 平面内创建形状

 var squareShape = new THREE.Shape();
 squareShape.moveTo( 0,0 );
 squareShape.lineTo( 0, 50 );
 squareShape.lineTo( 20, 80 );
 squareShape.lineTo( 50, 50 );
 squareShape.lineTo( 0, 0 );

如何制作 3D 世界?有什么解决办法吗?喜欢:

squareShape.moveTo( 0,0,0 );
squareShape.lineTo( 0, 50, 50 );

【问题讨论】:

    标签: javascript 3d three.js shape


    【解决方案1】:

    您可以像这样从 3D 点创建多边形:

    // geometry
    var geometry = new THREE.Geometry();
    geometry.vertices.push( new THREE.Vector3( 0, 5, 0 ) );
    geometry.vertices.push( new THREE.Vector3( 5, -5, -2 ) );
    geometry.vertices.push( new THREE.Vector3( -5, -5, 2 ) );
    geometry.vertices.push( new THREE.Vector3( 0, 5, 0 ) ); // close the loop
    
    // material
    var material = new THREE.LineBasicMaterial( { color: 0xffffff, linewidth: 1 } );
    
    // line
    var line = new THREE.Line( geometry, material );
    scene.add( line );
    

    three.js r.69

    【讨论】:

      【解决方案2】:

      从 r51 开始,有一种新的几何类型,THREE.ShapeGeometry,它是在一个平面上构建的二维形状。可以在此处找到其使用示例:http://mrdoob.github.com/three.js/examples/webgl_geometry_shapes.html

      您可以使用THREE.Shape 构造二维形状,然后调用shape.makeGeometry() 将其转换为THREE.ShapeGeometry。下面是一个画圆的伪代码示例:

      var circle = new THREE.Shape();
      var radius = 6;
      
      for (var i = 0; i < 16; i++) {
        var pct = (i + 1) / 16;
        var theta = pct * Math.PI * 2.0;
        var x = radius * Math.cos(theta);
        var y = radius * Math.sin(theta);
        if (i == 0) {
          circle.moveTo(x, y);
        } else {
          circle.lineTo(x, y);
        }
      }
      
      var geometry = circle.makeGeometry();
      var material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
      var mesh = new THREE.Mesh(geometry, material);
      

      meshpositionrotationscale,可以帮助您在三维空间中定位对象。

      【讨论】:

        【解决方案3】:

        您需要使用形状的顶点创建一个几何图形(在提取之后)并使用三角剖分来制作面。

        代码应如下所示:

        var geometry = new THREE.Geometry();
        var shapePoints = shape.extractPoints();
        var faces = THREE.Shape.Utils.triangulateShape(shapePoints.shape, shapePoints.holes);
        for (var i = 0; i < shapePoints.shape.length; i++) {
            geometry.vertices.push(new THREE.Vector3(shapePoints.shape[i].x, 0, shapePoints.shape[i].y));
        }
        for (var i = 0; i < faces.length ; i++) {
            var a = faces[i][2] , b = faces[i][1] , c = faces[i][0] ;
            var v1 = shapePoints.shape[a], v2 = shapePoints.shape[b], v3 = shapePoints.shape[c];
        
            geometry.faces.push( new THREE.Face3(a, b, c) );    
            geometry.faceVertexUvs[0].push(
                [ new THREE.UV(v1.x ,v1.y ), new THREE.UV(v2.x, v2.y), new THREE.UV(v3.x, v3.y)]);
        }
        geometry.computeCentroids();
        geometry.computeFaceNormals();
        

        【讨论】:

        • 这里的“形状”是什么?就我而言,我创建了一个圆圈,当我写“circle.extractPoints”时出现错误。
        猜你喜欢
        • 1970-01-01
        • 2012-02-05
        • 2021-10-18
        • 2018-10-06
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多