2017-07-07 2 views
1

J'ai donc accès au sceneView.pointOfView et je veux faire en sorte que l'expérience de l'AR ressemble à ce que je fais briller une lumière flash devant mes objets lorsque je les regarde.ARKit faire un point SCNLight devant où la caméra regarde?

J'ai essayé de créer un coup de projecteur comme celui-ci:

let spotLight = SCNLight() 
spotLight.type = .spot 
spotLight.spotInnerAngle = 60 
spotLight.spotOuterAngle = 60 
let spotNode = SCNNode() 
spotNode.light = spotLight 
spotNode.position = position 

Je pensais alors que l'ajout de la lumière au nœud de PointOfView ferait si la lumière se déplacerait avec l'appareil photo, ce qui signifie qu'il serait toujours briller la lumière à venir ...

sceneView.pointOfView?.addChildNode(spotLight) 

cela ne fonctionne pas, les objets apparaissent en noir, pas de lumière.

Qu'est-ce que je fais mal? Je veux faire en sorte que la lumière pointe vers ce que je regarde à travers l'expérience AR, comme si je tenais une lampe de poche et que je brillais la lumière droit devant ....

Une suggestion?

Répondre

2

Êtes-vous à la recherche d'une lampe de poche virtuelle qui illumine de manière réaliste la scène du monde réel dans le flux de la caméra? C'est un très grand ordre. Vous parlez essentiellement de projection-mapping d'un cône de lumière sur chaque surface réelle visible, ce qui nécessite de détecter et de modéliser ces surfaces, ce qui est beaucoup plus que la détection de plan horizontal ARKit.

(Si vous souhaitez éclairer de manière non réaliste la scène du monde réel, il vous suffit de placer un cercle blanc semi-transparent au milieu de la vue. plus réaliste, varier la taille ou la distance 3D, votre cercle basé sur hit-testing le centre de la vue sur la scène AR.)


voulez-vous une lampe de poche virtuelle qui illumine les objets virtuels que vous » avez-vous placé en AR? C'est facilement faisable. Et en fait, votre code est la plupart du temps à faire cela. Les problèmes probables:

spotNode.position = position 

Votre extrait ci-dessus ne dit pas où vous obtenez cette position. Si vous voulez que le nœud de projecteur soit attaché à la caméra, il doit s'agir d'un vecteur zéro. Autrement dit, vous voulez qu'il ait une position neutre dans l'espace local du nœud de la caméra. Régler ce vecteur sur un point non nul désactiverait votre source de lumière de la position de la caméra par un déplacement constant (peut-être au point que la lumière ne ferait rien d'utile dans votre scène).

sceneView.pointOfView?.addChildNode(spotLight) 

Selon le moment où ce code est exécuté, sceneView.pointOfView peut être nulle, et donc vous n'êtes pas exécuter réellement l'appel addChildNode. Vérifiez que le nœud de la caméra existe avant d'y ajouter un enfant. (J'ai essayé d'ajouter ce code à l'exemple de code du ARKit WWDC17 session - si vous le mettez dans leur fonction ARSCNView.setup(), vous devriez voir les objets virtuels que vous placez complètement éteints par un projecteur.)

D'ailleurs, vous Il n'est pas nécessaire d'ajouter un nœud enfant au nœud pointOfView pour qu'il y ait une lumière. Le nœud pointOfView peut être équipé d'une caméra et d'un voyant.

+0

J'ai fini par attacher mon spot au point de vue comme vous l'avez mentionné à la fin. Cela m'a permis de réaliser ce que je voulais. Je vous remercie. – zumzum