J'essaie d'ajouter un filtre B & W aux images de caméra d'un ARSCNView, puis de rendre les objets AR colorés par-dessus.Accès fiable et modification des cadres de caméra capturés sous SceneKit
Je suis presque là avec le code suivant ajouté au début de - (void)renderer:(id<SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time
CVPixelBufferRef bg=self.sceneView.session.currentFrame.capturedImage;
if(bg){
char* k1 = CVPixelBufferGetBaseAddressOfPlane(bg, 1);
if(k1){
size_t x1 = CVPixelBufferGetWidthOfPlane(bg, 1);
size_t y1 = CVPixelBufferGetHeightOfPlane(bg, 1);
memset(k1, 128, x1*y1*2);
}
}
Cela fonctionne très vite sur mobile, mais voici la chose: parfois un cadre de couleur est affichée. J'ai vérifié et mon code de filtrage est exécuté mais je suppose qu'il est trop tard, le pipeline de SceneKit a déjà traité l'entrée de la caméra.
Appeler le code plus tôt aiderait, mais updateAtTime
est le premier point auquel on peut ajouter un code image par image personnalisé.
Vous recevez des notifications sur les captures d'écran peuvent aider, mais ressemble à l'ensemble AVCapturesession is unaccessible.
L'exemple métal Arkit montre comment convertir l'image de la caméra RVB et qui est l'endroit où je ferais le filtrage, mais ce shader est caché lors de l'utilisation de SceneKit. J'ai essayé this possible answer mais c'est trop lent.
Alors, comment puis-je surmonter le cadre manque et convertir le flux de la caméra de manière fiable à BW?
Juste une idée que je n'ai pas testée moi-même: Pourriez-vous utiliser un [shaderModifier] (https://developer.apple.com/documentation/scenekit/scnshadable#1654834) pour convertir l'image de fond en noir et blanc en ajoutant un fragment shader? – orangenkopf
@orangenkopf définitivement un moyen d'aller si la méthode CVPixelBuffer ne peut pas être corrigé. A quoi associeriez-vous le shaderModifier? – diviaki
Selon le document ['ARSCNView'] (https://developer.apple.com/documentation/arkit/arscnview) le cadre est défini comme les scènes [' background'] (https://developer.apple.com/ documentation/scenekit/scnscene/1523665-background) qui est une propriété matérielle où vous pouvez attacher un modificateur de shader. Selon les commentaires [ici] (https://stackoverflow.com/questions/45321275/how-to-place-3d-model-using-arkit-ios-11-with-some-custom-background-view-withou/ 45324663 # 45324663) il pourrait ne pas être si facile si – orangenkopf