2017-12-20 63 views
0

그래프는 다음과 같습니다.
ARFrame -> 3DModelFilter (SCNScene + SCNRender) -> OtherFilters -> GPUImageView.SCNRender를 사용하여 ARUI를 GPUImage 렌더링에 통합하는 방법은 무엇입니까?

로드 3D 모델 :

NSError* error; 
SCNScene* scene =[SCNScene sceneWithURL:url options:nil error:&error]; 

는 3D 모델을 렌더링 :

SCNRenderer* render = [SCNRenderer rendererWithContext:context options:nil]; 
render.scene = scene; 
[render renderAtTime:0]; 

는 지금, 나는 ARFrame의 카메라가 SCNScene 변환을 적용하는 방법에 대한 퍼즐입니다.

일부 추측 :

  1. 내가 ARFrame 카메라에 할당 할 수 복잡한 조작없이 장면에서 카메라 노드의 변환 변환을?
  2. ARFrame 카메라의 projectMatrix는이 경우 나에게 도움이되지 않습니까?

갱신 2017년 12월 23일.

우선 @ reply에 감사드립니다. 귀하의 제안에 따라 ARSession에 코드를 추가했습니다 .DebUpdateFrame 콜백 :

ARCamera* camera = frame.camera; 
SCNMatrix4 cameraMatrix = SCNMatrix4FromMat4(camera.transform); 
cameraNode.transform = cameraMatrix; 

matrix_float4x4 mat4 = [camera projectionMatrixForOrientation:UIInterfaceOrientationPortrait viewportSize:CGSizeMake(375, 667) zNear:0.001 zFar:1000]; 
camera.projectionTransform = SCNMatrix4FromMat4(mat4); 

실행 앱.
1. 나는 우주선 전체를 볼 수 없으며 일부만 볼 수 있습니다. 그래서 카메라의 변환에 번역을 추가합니다. 아래 코드를 추가하면 전체 우주선을 볼 수 있습니다.

cameraMatrix = SCNMatrix4Mult(cameraMatrix, SCNMatrix4MakeTranslation(0, 0, 15)); 

2. iPhone을 위 또는 아래로 움직이면 추적 기능이 작동합니다. 그러나 iPhone을 왼쪽이나 오른쪽으로 움직이면 우주선은 화면에서 사라질 때까지 움직입니다.

내가 놓친 중요한 것이 있다고 생각합니다.

답변

0

ARCamera.transform은 카메라가 월드 공간 (및 방향)에있는 위치를 알려줍니다. 이것을 SCNCamera을 가지고있는 SCNNodesimdTransform 속성에 직접 할당 할 수 있습니다.

ARCamera.projectionMatrix은 카메라가 세계를 보는 방법을 알려줍니다. 본질적으로 카메라의 시야각은 무엇입니까? SceneKit에서 렌더링 한 내용을 카메라 이미지에 나타나는 실제 세계에 나타나게하려면 ARKit에서 제공하는 정보를 사용하여 SCNCamera을 설정해야합니다. 편의상 모든 SCNCamera 속성을 모두 무시하고 SCNCamera.projectionTransform 속성에 직접 투영 행렬을 설정할 수 있습니다. 해당 속성이 ARKit에 의해 제공하지 않는 SIMD matrix_float4x4SCNMatrix4 참고, 그래서 당신은 변환해야합니다 :

scnCamera.projectionTransform = SCNMatrix4FromMat4(arCamera.projectionMatrix); 

:보기를 설정 한 방법에 따라, 당신이해야 할 수도 있습니다 ARCamera.projectionMatrix 대신 ARCamera.projectionMatrixForOrientation:viewportSize:zNear:zFar:을 사용하면보기의 크기와 UI 방향에 맞는 투영을 얻을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 시도를했고 그 질문에 몇 가지 이슈 업데이트를했다. 제발 저를 구해주세요.나중에 세부 사항이 필요하면 샘플을 github에 업로드합니다. 다시 한번 감사드립니다. – honorfight