前提・実現したいこと
ARKitを用いて顔パーツの座標を取得し、その座標をiPhoneの画面の座標に変換したいと思っています。
以前こちらで質問させていただいた際に、参考になるサイトを教えていただいたのですが、コードがobjective-cで書かれています。swiftのコードに変換して試してみたいのですが、objective-cを触った経験がなく、調べているもののなかなか変換ができずにいます。
以下のコードをobjective-cをswiftに変換する際に、
参考になるサイトがありましたら教えていただきたいです。
もしくは、変換するコツや方法等がありましたらご教授いただきたいです。
サイト:https://ringsbell.blog.fc2.com/blog-entry-1270.html
objectivec
1+(SCNNode *)makeLineNodeForSCNVectors:(SCNVector3 *)positions 2{ 3 int indicies[] = {0,1}; 4 NSData *indexData = [NSData dataWithBytes:indicies length:sizeof(indicies)]; 5 6 SCNGeometrySource *vertexSource = [SCNGeometrySource geometrySourceWithVertices:positions count:2]; 7 SCNGeometryElement *element = [SCNGeometryElement geometryElementWithData:indexData primitiveType:SCNGeometryPrimitiveTypeLine primitiveCount:2 bytesPerIndex:sizeof(int)]; 8 SCNGeometry *line = [SCNGeometry geometryWithSources:@[vertexSource] elements:@[element]]; 9 10 SCNNode *lineNode = [SCNNode nodeWithGeometry:line]; 11 12 return lineNode; 13} 14 15{ 16 //呼び出す側 17 SCNVector3 positions[] = { SCNVector3Make(-3.0 , 3.0 , 0.0) , SCNVector3Make(3.0 , 3.0 , 0.0) }; 18 SCNNode *lineNode = [MyUtility makeLineNodeForSCNVectors:positions]; 19 lineNode.geometry.firstMaterial.diffuse.contents = [UIColor whiteColor]; 20}
サイト:https://ringsbell.blog.fc2.com/blog-entry-1277.html
objectivec
1{ 2 … 3 ARFaceGeometry *arFaceGeometry = faceAnchor.geometry; 4 const simd_float3 *vertices = arFaceGeometry.vertices; 5 simd_float3 pos3 = vertices[vertexIte];// —(1) 6 simd_float4 position = simd_make_float4(pos3 , 1.0); 7 8 simd_float4x4 modelMatrix = faceAnchor.transform;// —(2) 9 10 ARFrame *frame = arsceneView.session.currentFrame; 11 ARCamera *arcamera = frame.camera; 12 simd_float4x4 viewMatrix = [arcamera viewMatrixForOrientation:UIInterfaceOrientationPortrait];// —(3) 13 14 SCNCamera *camera = arsceneView.pointOfView.camera; 15 SCNMatrix4 cameraProjectionMatrix = camera.projectionTransform; 16 simd_float4x4 projectionMatrix = SCNMatrix4ToMat4(cameraProjectionMatrix);// —(4) 17 18 simd_float4x4 matrices = matrix_multiply(viewMatrix,modelMatrix); 19 matrices = matrix_multiply(projectionMatrix,matrices);// —(5) 20 21 position = matrix_multiply(matrices, position); 22 position = position / position.w;// —(6) 23 24 float xx = (position.x+1.0)/2.0 * arsceneView.frame.size.width; 25 float yy = (-position.y+1.0)/2.0 * arsceneView.frame.size.height;// —(7) 26 27 marker.center = CGPointMake(xx, yy);// —(8) 28}
試したこと
こちらのサイトが今のところ一番参考になっていたのですが、
載っていないことも多く、あまり進みませんでした。
その他
よろしくお願いします!!
あなたの回答
tips
プレビュー