私は地形を構成する何千もの立方体を描画するためにBufferGeometryを使用していますが、キューブの1つの位置を変更する必要がある場合、ジオメトリを更新する方法を見つけるのは難しいです。例えば、私は私のジオメトリを初期化するには、このコードを持っている:私はまで私は、キューブを移動した場合大きなBufferGeometryをすばやく更新するにはどうすればよいですか?
// 12 triangles per cube (6 quads)
var triangles = 12 * 150000;
var geometry = new THREE.BufferGeometry();
geometry.attributes = {
position: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
normal: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
},
color: {
itemSize: 3,
array: new Float32Array(triangles * 3 * 3),
numItems: triangles * 3 * 3
}
}
positions = geometry.attributes.position.array;
normals = geometry.attributes.normal.array;
colors = geometry.attributes.color.array;
(私はthis exampleの更新バージョンに私のテストをやっている)、移動することが表示されません。 :
geometry.attributes.position.needsUpdate = true;
これにより、更新中にFPSがドロップされます。私はこれを行うことができる別の方法はありますか? 1つのキューブを変更するだけでは少し不必要なようです(12三角形/ 36頂点)。それはかもしれませんが、私は実際に何をneedsUpdate
がチェックしていません。それを推測すると、アレイは再びシェーダに送られます。
ジオメトリを別々の小さなBufferGeometriesに分割できると思っていましたが、全体的なパフォーマンスに役立つかどうかはわかりません。私が理解しているところから、より多くの幾何学的なものはFPS以下です。
誰かが私がこれをどうやって行うか考えているなら、それは分かります! :)更新の問題のほかに、BufferGeometryは私が必要とするものと正確に思われる。ありがとう!
ないが、これは[ 'BufferAttribute'](HTTPSにマージされたr81''のように(あるいは単に正しく
updateRange
を設定):// github.com/mrdoob/three.js/blob/r81/src/core/BufferAttribute.js#L27)。 – Jay