Three.js顶点不会更新。

22
我正在使用 three.js r67,但似乎顶点没有更新。我设置了 geometry.dynamic = truegeometry.verticesNeedUpdate = true。圆圈在移动,但线条是静态的……是否有人可以帮助我?
var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer();

var g = new THREE.CircleGeometry( 4, 16 );
var m = new THREE.MeshBasicMaterial({color: 0x114949});
var circle = new THREE.Mesh( g, m );

circle.position.x = 2;
circle.position.y = 2;
circle.position.z = -1;
scene.add( circle );

var material = new THREE.LineBasicMaterial({color: 0xDF4949, linewidth: 5});

var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(0, 0, 0));
geometry.vertices.push(new THREE.Vector3(1, 1, 0));
geometry.verticesNeedUpdate = true;
geometry.dynamic = true;

var line = new THREE.Line(geometry, material);
scene.add(line);

var update = function() {
  circle.position.x += 0.01;
  line.geometry.vertices[0].x = circle.position.x;
};

var render = function() {
  renderer.render(scene, camera);
};

var loop = function() {
  update();
  render();
  requestAnimationFrame(loop, renderer.canvas);
};
loop();
1个回答

45

注意:传统的 Geometry 类已被替换为 BufferGeometry 类。


如果您想更新 BufferGeometry 的顶点位置,您需要使用以下模式:

mesh.geometry.attributes.position.array[ 0 ] += 0.01;

mesh.geometry.attributes.position.needsUpdate = true;

在渲染完成后,每当属性值发生变化时,您需要将needsUpdate标志重置为true

three.js r.147


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接