編輯:指定使用ArrowHelper 我希望在2D平面上生成大量箭頭以表示矢量字段。向量的數量是不同的,但通常是20000.如何在Three.js中使用THREE.ArrowHelper添加大量可見箭頭
使用THREE.ArrowHelper,我可以實現這一點,但速度非常慢,所以我認爲必須有更好的方法。如何在縮小時使用子採樣數量的矢量重新繪製字段,並且是否存在一種動態計算和添加渲染器將需要的方法?
新增: 我使用下面插入的代碼片段創建它。該循環在參數曲面的x,y位置處生成2D矢量場。
// set default color
var hex = 0x00ff00;
var u,v,xx,yy,ii,dir,mag,origin;
// loop through
Geometry[i].vertices.forEach(function(point,j)
{
xx = Math.floor((point.x-data[i].x0)/data[i].dx);
yy = Math.floor((point.y-data[i].y0)/data[i].dy);
ii = data[i].nx*yy+xx;
u = data[i].frame[data[i].xvec][ii];
v = data[i].frame[data[i].yvec][ii];
mag = Math.pow(u*u+v*v,.5);
dir = new THREE.Vector3(u, v, 1);
origin = new THREE.Vector3(point.x+data[i].dx/2,
point.y+data[i].dy/2, 1);
data[i].arrowHelper[j] = new THREE.ArrowHelper(dir.normalize(),
origin,
data[i].scale*mag,
hex);
scene.add(data[i].arrowHelper[j]);
});
我只是一個更強大的機器,它運行平滑,但還是採取了顯著的性能影響進行測試。
我可以顯示並平滑渲染參數曲面,甚至1e06底層紋理也沒有問題,但是ArrowHelpers會導致性能下降。
哪一部分實際上是慢?你是否使用20,000次撥打電話?如果是這樣,答案是將他們全部畫成一個平局。 –
你不需要動態計算什麼是可見的; webgl會自動執行此操作(截錐體剔除)。 – gaitat
用更多的細節更新了問題。 – anemes