1
我正在嘗試沿着路徑繪製一個管,並且TubeGeometry對象似乎是爲此而製作的。但是,有一個問題 - 我也希望半徑在路徑的每個點上都是可變的。基本上,我試圖繪製一個可變寬度的管。three.js可變半徑的管
我可以使用多個管和圓柱體繪製這個圖,但我不禁想到應該有更好的方法。
我正在嘗試沿着路徑繪製一個管,並且TubeGeometry對象似乎是爲此而製作的。但是,有一個問題 - 我也希望半徑在路徑的每個點上都是可變的。基本上,我試圖繪製一個可變寬度的管。three.js可變半徑的管
我可以使用多個管和圓柱體繪製這個圖,但我不禁想到應該有更好的方法。
WestLangley的建議效果很好。我結束了創建基於THREE.TubeGeometry具有以下修改(R59)的一類:
,如下所示(導入posRadius變量和取代爲半徑)修改後的代碼:
爲(I = 0;我<爲NumPoints;我++){ this.grid [I] = [];
u = i/(numpoints - 1);
pos = path.getPointAt(u);
var posRadius = this.radius[Math.floor((this.radius.length - 1) * u)];
tangent = tangents[i];
normal = normals[i];
binormal = binormals[i];
for (j = 0; j < this.radialSegments; j++) {
v = j/this.radialSegments * 2 * Math.PI;
cx = -posRadius * Math.cos(v); // TODO: Hack: Negating it so it faces outside.
cy = posRadius * Math.sin(v);
pos2.copy(pos);
pos2.x += cx * normal.x + cy * binormal.x;
pos2.y += cx * normal.y + cy * binormal.y;
pos2.z += cx * normal.z + cy * binormal.z;
this.grid[i][j] = vert(pos2.x, pos2.y, pos2.z);
}
}
是管直?如果是這樣,請使用'THREE.LatheGeometry'。 – WestLangley
不幸的是,沒有。但是,謝謝你的建議! –
那麼,你可以通過'TubeGeometry.js'來接受一個可變半徑作爲沿路徑距離的函數。 – WestLangley