我使用SceneKit画出粗线'圆形端盖。 我发现最快的方法是将它们分成3个部分:一个矩形体和两个圆形端盖。 我对SceneKit用于绘制这些线条的绘制调用数量存在问题(或误解)。
我创建了以下场景图:
function()
每个线节点包含3个节点的3个节点。其他节点用于支持其余的数据模型。所有几何都具有相同的材料。
绘制5行需要11次绘制调用。奇怪的是,当我要么省略身体,要么省略两个端盖时,它只需要2次绘制调用。为什么不抽取身体和结束时间需要3或4次抽签? 绘制3076行时问题变得更糟,完全绘制时需要6.15k绘制调用,而只需要对主体或端盖进行10次绘制调用。
我尝试进行测试设置以找到问题,如下所示:
scene's root node -> image node -> sr node -> level node -> line node
首先创建图表的基本部分。然后创建两个几何来表示主体和端盖,然后构造许多线节点。
我注意到如果所有(两个)几何共享完全相同的材料,那么绘制调用计数确实是6.15k。如果shape2具有SCNNode *imageNode=[SCNNode node];
imageNode.name=@"image";
[self.sceneView.scene.rootNode addChildNode:imageNode];
SCNNode *srNode=[SCNNode node];
srNode.name=@"sr";
[imageNode addChildNode:srNode];
SCNNode *levelNode=[SCNNode node];
levelNode.name=@"level";
[srNode addChildNode:levelNode];
NSBezierPath *path1=[NSBezierPath bezierPathWithRect:NSMakeRect(0, 0, 1, 1)];
NSBezierPath *path2=[NSBezierPath bezierPathWithOvalInRect:NSMakeRect(0, 0, 1, 2)];
SCNShape *shape1=[SCNShape shapeWithPath:path1 extrusionDepth:0];
shape1.name=@"cap shape";
SCNShape *shape2=[SCNShape shapeWithPath:path2 extrusionDepth:0];
shape2.name=@"body shape";
for (NSUInteger i=0; i<5; i+=1) {
SCNNode *node=[SCNNode node];
node.name=@"line";
SCNNode *node1=[SCNNode nodeWithGeometry:shape1];
node1.name=@"cap";
node1.position=SCNVector3Make(rand()/(float)RAND_MAX*10, rand()/(float)RAND_MAX*10, 0);
SCNNode *node2=[SCNNode nodeWithGeometry:shape2];
node2.name=@"body";
node2.position=SCNVector3Make(rand()/(float)RAND_MAX*10, rand()/(float)RAND_MAX*10, 0);
node2.scale=SCNVector3Make(2, 6, 1);
[node addChildNode:node1];
[node addChildNode:node2];
node1=[node1 copy];
node1.position=SCNVector3Make(rand()/(float)RAND_MAX*10, rand()/(float)RAND_MAX*10, 0);
[node addChildNode:node1];
[levelNode addChildNode:node];
}
shape1的材质。平局通话数是预期的12。
如何找出使用相同材料进行如此多抽奖调用的原因? 文档明确指出材料旨在重复用于不同的几何形状。