長時間第一次和所有 - 我是Three.js和Tween.js的新手,並希望看到是否有可能同時補間200k Three.js頂點一個到另一個的位置。請原諒我可以互換使用單詞像素和頂點。三js補間js性能滯後於許多同時補間
我想在網格中顯示200k像素。用戶可以決定以多種方式對這些200k像素進行排序,使它們在網格中重新排列。我希望所有像素能夠在它們的初始位置和最終位置之間同時補間。目前,我的頂點同時和補間一起移動,但是一旦動畫接近完成,我就會遇到嚴重的性能問題。我希望有人能幫幫忙!
對於每一個200K的頂點我與他們生活在這個列表相關聯在補對象,我在現場繪製頂點後創建的,
var scPartVerts = scene.children[0].geometry.vertices;
var dataSetLen = 200000;
tweenList = []
for (i=0; i<dataSetLen; i ++){
tweenList.push(new TWEEN.Tween(scPartVerts[i]))
}
使用D3(正是我所熟悉的與用於處理點擊事件),我提供一個新的XY位置的每個補間移動到
d3.select("#key").on("click", function() {
for (i = 0; i < dataSetLen; i ++){
var newX = desiredXPostionList[i]; //grab the new X from presorted list
var newY = desiredYPositionList[i]; //grab the new Y from presorted list
tweenList[i].to({
x: newX,
y: newY
}, 2500)
.start();
}
我再更新充斥同時渲染,
function render() {
scene.children[0].geometry.verticesNeedUpdate = true;
TWEEN.update();
renderer.render(scene, camera);
}
動畫將用於運行正常〜補間的75%,然後它來研磨,口吃,0 FPS,在30秒左右戛然而止一旦頂點接近其最終位置。我試圖看看動畫時間線,看起來所有這些時間都被轉移到更新補間。
我在某種程度上使用我的d3.select方法提供冗餘補間更新嗎? (JavaScript是否註冊一次點擊爲10並嘗試更新補間10x?)或者tween.js不能同時平穩補間200k個職位?非常感謝你的幫助!
如果它符合您的任務,您也可以將答案標記爲已接受。 – prisoner849
非常感謝你!你是一個絕對的生命保護者。我曾懷疑補間可能是矯枉過正的,可能會有更少的CPU密集型方式。我無法感謝你的幫助! –
現在我已經做出了相同的250K點,但是使用'THREE.BufferGeometry()'和'THREE.ShaderMaterial()'。性能提高令人難以置信。如果你對它感興趣,我可以把它作爲另一個答案。 – prisoner849