我使用three.js創建簡單的3d矢量環境。我使用線條來表示所有3個矢量元素x,y,z和最後一個矢量表示的一條線。問題是在Windows中設置線條is not working的寬度。我試圖實現的解決方法是將一個圓柱體放置到該線上(請參見下圖中的紅色對象)。Three.js - 表示矢量的圓柱體的旋轉
這就是我目前的結果是:
正如你看到的,我不能夠在氣缸旋轉到正確的位置。
我遇到了圓柱體的旋轉中心位於物體中間的問題,所以我將旋轉點移動到了圓柱體的開始處。但是,旋轉仍然無法正常工作。我想,這個軸的旋轉會相互影響。
下面是代碼:
// VEKTOR
var vektor = {};
vektor._x = 2;
vektor._y = 1.5;
vektor._z = 1;
vektor._length = Math.sqrt(vektor._x*vektor._x + vektor._y*vektor._y + vektor._z*vektor._z);
// CYLINDER
var cyl_material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
// cylinder which is our line that represents the vector
var cyl_width = 0.025; // default line width
var cyl_height = vektor._length;
// THREE.CylinderGeometry(radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded)
var cylGeometry = new THREE.CylinderGeometry(cyl_width, cyl_width, cyl_height, 20, 1, false);
// translate the cylinder geometry so that the desired point within the geometry is now at the origin
// https://stackoverflow.com/questions/12746011/three-js-how-do-i-rotate-a-cylinder-around-a-specific-point
cylGeometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, cyl_height/2, 0));
var cylinder = new THREE.Mesh(cylGeometry, cyl_material);
updateCylinder();
scene.add(cylinder);
而且updateCylinder改掉做旋轉的功能。
function updateCylinder() {
// ... stuff, then:
cylinder.rotation.x = Math.atan2(vektor._z,vektor._y);
cylinder.rotation.y = 0.5*Math.PI+Math.atan2(vektor._x,vektor._z);
cylinder.rotation.z = Math.atan2(vektor._x,vektor._y);
}
這是當前演示:http://www.matheretter.de/3d/vektoren/komponenten/
我在做什麼毛病旋轉?如何實現它以便氣缸跟隨矢量線?
感謝您的幫助。
不能與數學但你已經得到了在那裏線幫助,您也許可以使用這條線來建立你的氣缸? http://threejs.org/examples/#webgl_geometry_extrude_splines 看到這個例子。如果你有一個樣條線(你的線),你可以用它來從中擠出一個圓柱體。通過這種方式,您當然可以在每次更改時都創建一個新的幾何體。但我只是想將這個添加到您的問題中,作爲一種替代方案。 – GuyGood