javascript - 我想用 Three.js 生成 2D 八边形

标签 javascript three.js coordinates

当我尝试生成一个正八边形时,我用这段代码得到了一个特殊的三 Angular 形:

    var geom = new THREE.Geometry(); 

    geom.vertices.push( new THREE.Vector3(100, 250, 0));
    geom.vertices.push( new THREE.Vector3(250, 100, 0));
    geom.vertices.push( new THREE.Vector3(250, -100, 0));
    geom.vertices.push( new THREE.Vector3(100, -250, 0));
    geom.vertices.push( new THREE.Vector3(-100, 250, 0));
    geom.vertices.push( new THREE.Vector3(-250, -100, 0));
    geom.vertices.push( new THREE.Vector3(-250, 100, 0));
    geom.vertices.push( new THREE.Vector3(-100, 250, 0));

    geom.faces.push( new THREE.Face3(0, 1, 2));
    geom.faces.push( new THREE.Face3(0, 2, 3));
    geom.faces.push( new THREE.Face3(0, 3, 4));
    geom.faces.push( new THREE.Face3(0, 4, 5));
    geom.faces.push( new THREE.Face3(0, 5, 6));
    geom.faces.push( new THREE.Face3(0, 6, 7));



    var material = new THREE.MeshBasicMaterial();

    var mesh = new THREE.Mesh( geom, material);

    mesh.position.set(0, 0, -1000);

    scene.add(mesh);

此外,生成的三 Angular 形的一个顶点被放置在我什至在代码中没有提到的地方。 可能只显示最后添加的面,但我希望看到所有彼此相邻的面形成正八边形。

最佳答案

因此,面中顶点的顺序是逆时针的,第 5 点和第 8 点是不同的:

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 0, 500);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera, renderer.domElement);

var geom = new THREE.Geometry();

geom.vertices.push(new THREE.Vector3(100, 250, 0));
geom.vertices.push(new THREE.Vector3(250, 100, 0));
geom.vertices.push(new THREE.Vector3(250, -100, 0));
geom.vertices.push(new THREE.Vector3(100, -250, 0));
geom.vertices.push(new THREE.Vector3(-100, -250, 0)); //  y-coordinate is corrected
geom.vertices.push(new THREE.Vector3(-250, -100, 0));
geom.vertices.push(new THREE.Vector3(-250, 100, 0));
geom.vertices.push(new THREE.Vector3(-100, 250, 0));

geom.faces.push(new THREE.Face3(0, 2, 1)); // order of vertices
geom.faces.push(new THREE.Face3(0, 3, 2));
geom.faces.push(new THREE.Face3(0, 4, 3));
geom.faces.push(new THREE.Face3(0, 5, 4));
geom.faces.push(new THREE.Face3(0, 6, 5));
geom.faces.push(new THREE.Face3(0, 7, 6));

geom.computeFaceNormals();
geom.computeVertexNormals();

var material = new THREE.MeshBasicMaterial({
  color: "white"
});

var mesh = new THREE.Mesh(geom, material);

scene.add(mesh);

var points = new THREE.Points(geom, new THREE.PointsMaterial({
  size: 20,
  color: 0xff0000
}));
scene.add(points); // just to visualize the points

render();

function render() {
  requestAnimationFrame(render);
  renderer.render(scene, camera);
}
body {
  overflow: hidden;
  margin: 0;
}
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>

关于javascript - 我想用 Three.js 生成 2D 八边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359559/

相关文章:

javascript - AngularJS 指令到指令通信

javascript - 从表附加到另一个表时添加额外的列

javascript - 1 个阵列中有许多网格的众多场景

google-maps - 根据坐标创建 Google map 链接

ruby - 我如何使用 (Ruby) RGeo 转换 (Unproject) 坐标

javascript - 获取 anchor 的偏移位置

javascript - 循环绘制许多 Canvas ?

javascript - 循环 javascript 对象,同时在其中运行异步调用

three.js - 检测与 Sprite 相交的光线

python - 在 Python 中从数组中删除字符串引号