【发布时间】:2012-03-05 15:12:46
【问题描述】:
我有一个包含大约 108000 个三角形的网格,应该使用 WebGL 渲染。
目前我不使用任何框架,只使用纯 WebGL。我已经通过 id 映射实现了对象识别,用于拾取回调功能以及基本的相机操纵器。
现在我想切换到 WebGL 框架来解决维护问题。
我已经尝试过 Three.js,但是对于大型网格来说速度很慢。你知道适合大型网格的 WebGL 框架吗?
编辑:
我尝试渲染一个包含近 10000 个立方体节点的树形图,并希望对每个节点进行挑选(总体目标是 100000 个立方体)。
这是构建场景的函数:
BP2011.Treemap.prototype.buildScene = function() {
// ... [create scene, camera and lights]
var nodesParentNode = new THREE.Object3D();
scene.add(nodesParentNode);
var nodes = this._nodes;
for(var i = 0; i < nodes.length; i++) {
nodesParentNode.add(nodes[i].buildSceneObject());
}
this.threejs.nodesParentNode = nodesParentNode;
};
这里是构建单个 Cube 的函数:
BP2011.Treemap.Node.prototype.buildSceneObject = function( buildGeometry, buildMaterial ) {
// ...
if (buildGeometry || (self.sceneObject && self.sceneObject.geometry === undefined)) {
// ... [compute cube position and extension]
geometry = new THREE.CubeGeometry(
maxX - minX,
maxY - minY,
maxZ - minZ);
} else {
geometry = this.sceneObject.geometry;
}
mesh = new THREE.Mesh( geometry, new THREE.MeshPhongMaterial({color: 0x4444DD}));
mesh.position.x = (maxX + minX)/2;
mesh.position.y = (maxY + minY)/2;
mesh.position.z = (maxZ + minZ)/2;
// testing for performance
mesh.matrixAutoUpdate = false;
mesh.updateMatrix();
mesh.geometry.__dirtyVertices = true;
mesh.geometry.__dirtyElements = true;
// backwards reference for handling
this.sceneObject = mesh;
this.sceneObject.behaviorObject = this;
return this.sceneObject;
};
所以我有一个包含近 10000 个子节点的父节点,因为我不知道如何对单个对象进行拾取。
如果您有任何建议,如何解决这个问题,欢迎您。
我也已经看过 scene.js: 多达 4000 个立方体的性能非常好,但在特定数量的立方体(大约 4100)处急剧下降。所以我想我在那里传递了一些数组大小。
【问题讨论】:
标签: performance frameworks webgl mesh