Je suis nouveau dans Three.js.
Je veux dessiner des courbes (basées sur certaines équations paramétriques) sur l'espace 3D, en utilisant THREE.JS
, pour illustrer le chemin du dessin.
Pour ce faire, j'ai essentiellement essayé de deux façons:
APPROCHE UN: mettre à jour les valeurs en géométrie. :
var lineGeometry = new THREE.Geometry(); lineGeometry.vertices.push(new THREE.Vector3(starting_x,starting_y,starting_z)); var lineMaterial = new THREE.LineBasicMaterial({color: 0xffffff}); var line = new THREE.Mesh(lineGeometry, lineMaterial); scene.add(line); function render() { requestAnimationFrame(animate); //calculate x,y,z based on my equation lineGeometry.vertices.push(new THREE.Vector3(x,y,z)); renderer.render(scene, camera); }
APPROCHE DEUX: en utilisant la fonction de mise à jour Tween.js. Référencé sur
var lineGeometry = new THREE.Geometry(); lineGeometry.vertices.push(new THREE.Vector3(starting_x,starting_y,starting_z)); var lineMaterial = new THREE.LineBasicMaterial({color: 0xffffff}); var line = new THREE.Mesh(lineGeometry, lineMaterial); scene.add(line); var position = {x: -15, y: 0, z: 0}; var target = {x: 4, y: 0, z: -15}; var tween = new TWEEN.Tween(position).to(target, 8000); tween.easing(TWEEN.Easing.Elastic.InOut); tween.onUpdate(function() { lineGeometry.vertices.push(position.x, position.y, position.z); }); tween.start(); animate(); function animate() { render(); requestAnimationFrame(animate); TWEEN.update(); } function render() { renderer.render(scene, camera); }
Comment puis-je réaliser cela comme dans ce lien (c'est dans l'espace 2D et j'essayais de réaliser dans l'espace 3D)?
PS: Je peux ajouter des formes et des lignes à la scène également animer l'objet entier avec tween.js. Mais le problème est d'animer le dessin de ligne. Aidez-nous.
1. J'ai créé une géométrie tamponnée en spécifiant sa taille égale au nombre de points que je dois tracer.
var buffer_geometry = new THREE.BufferGeometry(); buffer_geometry.attributes = { position: { itemSize: 3, array: new Float32Array(numberofpoints) } };
2. Gardez le tableau de position pour le mettre à jour pendant le rendu
positions = buffer_geometry.attributes.position.array;
3. Dans la fonction de mise à jour, chaque 6 points voisins ont été mis à jour par mes valeurs x, y, z sur la courbe:
positions[ i * 6 ] = x; positions[ i * 6 + 1 ] = y; positions[ i * 6 + 2] = z; positions[ i * 6 + 3] = x + 0.1; positions[ i * 6 + 4] = y + 0.1; positions[ i * 6 + 5] = z + 0.1;