Reputation: 22946
I want to update a vertex position AFTER rendering. The changed vertex and the update statement after the rendering in the following code doesn't have any effect.
I request you to point out what am I missing here.
var mat = new THREE.LineBasicMaterial( { color: 0xffffff, linewidth: 2 } );
var wireframe = new THREE.LineSegments( geo, mat );
scene.add( wireframe );
wireframe.geometry.attributes.position.array[0] = 300;
wireframe.geometry.attributes.position.array[1] = 300; wireframe.geometry.attributes.position.array[2] = 3;
wireframe.geometry.verticesNeedUpdate = true;
camera.position.z = 1000;
renderer.render(scene, camera);
wireframe.geometry.attributes.position.array[0] = 3;
wireframe.geometry.verticesNeedUpdate = true;
Upvotes: 1
Views: 1459
Reputation:
First off never include three.js from threejs.org It will break as they update. Always use your own copy or a versioned cdn
you need to set
wireframe.geometry.attributes.position.needsUpdate = true;
And the nothing will change visually in three.js unless you render after changing something. Just adding another call to render shows your change
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var geo = new THREE.EdgesGeometry(new THREE.BoxGeometry(500, 500, 500));
var mat = new THREE.LineBasicMaterial({
color: 0xffffff,
linewidth: 2
});
var wireframe = new THREE.LineSegments(geo, mat);
scene.add(wireframe);
wireframe.geometry.attributes.position.array[0] = 300;
wireframe.geometry.attributes.position.array[1] = 300;
wireframe.geometry.attributes.position.array[2] = 300;
camera.position.z = 1000;
renderer.render(scene, camera);
wireframe.geometry.attributes.position.array[0] = 0;
wireframe.geometry.attributes.position.array[1] = 0;
wireframe.geometry.attributes.position.array[2] = 0;
wireframe.geometry.attributes.position.needsUpdate = true;
renderer.render(scene, camera);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.min.js"></script>
you might want to check out these tutorials
Upvotes: 2