ARフィルタービューのカメラ画像にB & Wフィルターを追加して、色付きのARオブジェクトをその上にレンダリングしようとします。時々色の枠が表示されます。次のコードではほとんど存在しSceneKitの下で捕捉されたカメラフレームに確実にアクセスして修正する
I'amは- (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);
}
}
これはモバイル上で本当に速く動作しますが、ここでのことだの先頭に追加しました。 私のチェックしたフィルタリングコードが実行されましたが、私はそれが遅すぎると想定しています。SceneKitのパイプラインは既にカメラ入力を処理しています。
コードを先に呼び出すと便利ですが、updateAtTime
は、フレームコードでカスタムフレームを追加できる最も早い時点です。
フレームキャプチャの通知が役立つかもしれないの取得が、全体AVCapturesession is unaccessible.
のように見えますが、金属ARKitの例では、RGBにカメラ画像を変換する方法を示し、それは私がフィルタリングを行うだろう場所ですが、それシェーダがありますSceneKitを使用すると非表示になります。
私はthis possible answerを試しましたが、遅すぎます。
フレームミスを克服し、カメラのフィードをBWに確実に変換するにはどうすればよいですか?ここで
自分でテストしていないアイデア:[shaderModifier](https://developer.apple.com/documentation/scenekit/scnshadable#1654834)を使用して、バックグラウンドイメージを白黒に変換することができますか?フラグメントシェーダー? – orangenkopf
@orangenkopf CVPixelBufferメソッドを修正することができない場合は、必ず移動する方法です。 shaderModifierを何に付けますか? – diviaki
[ARSCNView'](https://developer.apple.com/documentation/arkit/arscnview)文書によれば、フレームはシーン['background'](https://developer.apple.com/)に設定されます。 documentation/scenekit/scnscene/1523665-background)は、シェーダ修飾子を付けることができる重要なプロパティです。コメント[ここ](https://stackoverflow.com/questions/45321275/how-to-place-3d-model-using-arkit-ios-11-with-some-custom-background-view-withou/)によると45324663#45324663)それは簡単ではないかもしれませんが、 – orangenkopf