So che la rotazione 3D è ben documentata su SO e molti altri siti, ma nonostante la lettura di numerose spiegazioni, non ho ancora capito dove sto andando male. Il mio background è nell'arte e nel design, non nella matematica e nella programmazione, e non sono mai veramente sicuro se il mio angolo di attacco (nessun gioco di parole) sia quello giusto. Piuttosto che incollare un patchwork del mio triste codice, includo un'immagine che descrive il mio problema. Quello che mi piacerebbe davvero è una ripartizione dettagliata di come risolverlo. Lo pseudo codice è utile, ma imparerò di più se qualcuno mi indirizzerà nella giusta direzione o indicherà le insidie più comuni.Rotazione 3D con asse e angolo
Red = asse X, Verde = Y, Blu = Z-Axis
Magenta vettori = origine -> qualche X, Y, Z Punto
Cubo magenta = media dei punti finali dei due vettori magenta (c'è un nome migliore per questo?)
Vettore bianco = prodotto incrociato dei due vettori magenta (esteso per displ ay, effettivo vettore è normalizzato)
ciano cubo oggetto = rotazione sicuro
Ho usato precedentemente Away3D e Papervision; in queste librerie, applicando angoli di Eulero alle proprietà rotationX, rotationY o rotationZ di un oggetto ruoterà l'oggetto localmente, come se fosse all'origine indipendentemente dalla sua posizione attuale. Con Three.js, questo non è il caso. La modifica delle proprietà rotation.x e rotation.y di un oggetto produce un effetto bizzarro in cui l'oggetto apparentemente si inclina leggermente sull'asse Z. Ancora più confuso è che ciò accade quando l'oggetto si trova all'origine. Ho pensato che forse usando le funzioni di Quaternion -> Matrix o Axis/Angle -> Matrix avrei risolto il mio problema, ma niente da fare. Sembra che ci sia un concetto centrale che non sto ottenendo.
Ad ogni modo, quello che mi piacerebbe fare è orientare il cubo al vettore prodotto vettoriale (bianco), in modo che la parte superiore del cubo si trova ad affrontare la direzione di quel vettore. Quindi vorrei ruotare il cubo lungo lo stesso asse. L'immagine che ho allegato mostra il risultato di più ore di quelle che vorrei ammettere cercando di ottenere questo risultato. Il mio codice è vagamente simile a questo:
axis = Vector3.cross(a, b)
axis.normalize()
angle = 45 * TO_RADIANS;
quat = AxisAngle2Quaternion(axis, angle)
rot = Quaternion2Matrix(quat)
cube.matrix = rot
Grazie in anticipo,
Casey
Edit: Avvio di una taglia
Forse sto equivoco come questo dovrebbe lavoro. Ecco un'altra immagine:
Am I errato nel ritenere che questo magenta vettore è l'asse, e le frecce arancioni indicano la rotazione attorno a questo asse in base all'angolo? Un modo o nell'altro, voglio orientare il cubo ciano sulla base di qualche vettore direzionale e spin. Che cosa sto facendo di sbagliato!?
Nessuno reagisce, ma io in realtà penso, che la tua domanda è una dei migliori formulati che ho visto qui finora. Forse solo nessuno lo sa? Sarei anche curioso di vedere una risposta qui. – erikbwork
Forse si stanno allontanando dall'aspetto Three.js ... Mi aspettavo che questo fosse un problema piuttosto semplice – Casey
Sono stato in grado di avvicinarmi al metodo "Utils3D.pointTowards()" in Flash: http: // help. adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Utils3D.html Ma non so come applicare la rotazione attorno all'asse e non riesco a trovare alcuna funzione OSS comparabile – Casey