Ios 无法使用categoryBitMask将SCNLight灯光指定给特定SceneKit节点
我正试图在SceneKit中使用Ios 无法使用categoryBitMask将SCNLight灯光指定给特定SceneKit节点,ios,objective-c,scenekit,Ios,Objective C,Scenekit,我正试图在SceneKit中使用categoryBitMask,以确保SCNLight灯光只影响某些对象节点 文档似乎很简单,但我无法使事情正常工作 例如,以下是我的灯光: SCNLight *lightFront = [SCNLight light]; lightFront.color = [UIColor colorWithWhite:0.90f alpha:1.0f]; lightFront.type = SCNLightTypeOmni; lightFront.castsShadow =
categoryBitMask
,以确保SCNLight
灯光只影响某些对象节点
文档似乎很简单,但我无法使事情正常工作
例如,以下是我的灯光:
SCNLight *lightFront = [SCNLight light];
lightFront.color = [UIColor colorWithWhite:0.90f alpha:1.0f];
lightFront.type = SCNLightTypeOmni;
lightFront.castsShadow = YES;
lightFront.categoryBitMask = 2;
这是我的对象节点:
characterNode = [SCNNode node];
SCNScene *characterScene = [SCNScene sceneWithURL:[[NSBundle mainBundle] URLForResource:@"character_idle" withExtension:@"dae"] options:nil error:nil];
for( SCNNode *node in characterScene.rootNode.childNodes ) {
node.categoryBitMask = 2;
[characterNode addChildNode:node];
}
characterNode.categoryBitMask = 2;
两种情况下的categoryBitMask
匹配。但是<代码>lightFront不影响characterNode
但是,如果我将灯光的类别BitMask
更改为3,则节点将显示灯光:
lightFront.categoryBitMask = 3;
这应该正好相反,对吗
场景中的其他对象节点——即使是那些具有不同的类别BitMasks
——似乎都获得相同的照明效果。这意味着,无论categoryBitMask
如何,上面的lightFront
都将在我的场景中的所有对象节点上可见或不可见。据我所知
救命啊 我不确定这一点,但我认为问题可能是因为您使用的是int而不是bit。尝试将1替换为
0b1
,2替换为0b10
,3替换为0b11
等。这可能不是问题的原因,但至少会消除一个可能的混淆源。for循环将所有characterScene.rootNode.childNodes复制到characterNode,但从未添加到场景中…?我没有包含所有代码,我认为是相关的位。注意2&3!=0
因此,为灯光的位掩码设置2
或3
应该会得到相同的结果。@m语言:奇怪,但这实际上改变了效果。不一样!