21

I'm using three.js r67, and vertices does not seem to be updated. I set geometry.dynamic = true, geometry.verticesNeedUpdate = true. Circle is moving, but line is static....

Someone could help me?

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();
Aasha joney
  • 508
  • 5
  • 23
NHK
  • 769
  • 1
  • 7
  • 16

1 Answers1

44

Note: The legacy Geometry class has been replaced with the BufferGeometry class.


If you want to update the vertex positions of your BufferGeometry, you need to use a pattern like so:

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

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

After rendering, you need to reset the needsUpdate flag to true every time the attribute values are changed.

three.js r.147

WestLangley
  • 102,557
  • 10
  • 276
  • 276