1

I have a problem whit the camera in SceneKit, by default i can move, rotate, zoom my camera whit this line :

myView.allowsCameraControl = YES;

But my camera can pass through walls and floor (which allows me to see the underside of the stage ) .

My first request: is it possible to apply constraints to the camera (position, rotation) ?

My second request: I thought making a cube encompassing stage and do my collision detection between my cube and my camera, but it does not work ...

code for viewDidLoad:

SCNView *myView = (SCNView *)self.view3D;
myView.scene = [SCNScene sceneNamed:@"art.scnassets/Pointe Marrin 3 def 3 def 2.dae"];
myView.scene.physicsWorld.contactDelegate = self;
myView.scene.physicsWorld.gravity = SCNVector3Make(0, 0, 0);
cubeLimite = [myView.scene.rootNode childNodeWithName:@"Cube" recursively:YES];
camera = [myView.scene.rootNode childNodeWithName:@"Caméra" recursively:YES];
cubeLimite.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:nil];
cubeLimite.physicsBody.mass = 0;
cubeLimite.categoryBitMask = SCNPhysicsCollisionCategoryDefault;
cubeLimite.physicsBody.collisionBitMask = SCNPhysicsCollisionCategoryAll;


//test camera
CGFloat boxSide = 0.001;
SCNBox *box = [SCNBox boxWithWidth:boxSide
                            height:boxSide
                            length:boxSide
                     chamferRadius:0];
SCNNode *boxNode = [SCNNode nodeWithGeometry:box];
SCNPhysicsShape *shape = [SCNPhysicsShape shapeWithGeometry:boxNode.geometry options:nil];
camera.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:shape];
camera.physicsBody.mass = 0;
camera.categoryBitMask = SCNPhysicsCollisionCategoryDefault;
camera.physicsBody.collisionBitMask = SCNPhysicsCollisionCategoryAll;

Code for delegate :

- (void)physicsWorld:(SCNPhysicsWorld *)world
 didBeginContact:(SCNPhysicsContact *)contact{
NSLog(@"Contact debut");
}
- (void)physicsWorld:(SCNPhysicsWorld *)world
 didUpdateContact:(SCNPhysicsContact *)contact{
NSLog(@"Contact milieu");
}
- (void)physicsWorld:(SCNPhysicsWorld *)world didEndContact:(SCNPhysicsContact *)contact{
NSLog(@"Contact fin");
}

The delegate : SCNPhysicsContactDelegate is declared in the .h file

Ideas ? thank you beforehand

Stoun
  • 13
  • 4

1 Answers1

0

It's not possible, as far as I know, to constrain the default camera when allowsCameraControl is enabled.

The answer to Rotate SCNCamera node looking at an object around an imaginary sphere outlines an approach that might work for you, depending on what constraints you need to build.

Community
  • 1
  • 1
Hal Mueller
  • 7,019
  • 2
  • 24
  • 42