2017-12-22 8 views
0

SceneKit에 비행기를 만들면 평면의 법선 벡터는 기본적으로 양의 z 축이됩니다. 다른 법선 벡터를 사용하여 평면의 방향을 바꾸고 싶습니다. 그러나, 나는 새로운 법선 벡터가 무엇인지 알고 있음에도 불구하고 평면을 올바른 위치로 회전시키는 방법을 확신하지 못합니다. 생각?SceneKit 비행기 회전

답변

0

다음은 입력 SCNVector3 '축'(대상 노멀이 됨)을 기반으로 회전 행렬을 만드는 예제입니다. 당신이 다음 곱셈을 사용하여 평면 노드의 변환 속성에 적용 할 수 있습니다

 SCNVector3 tangent0 = [self crossVector: axis: SCNVector3Make(1, 0, 0)]; 
     if ([self dotVector:tangent0 : tangent0] < 0.001) { 
      tangent0 = [self crossVector: axis: SCNVector3Make(0, 1, 0)]; 
     } 
     tangent0 = [self normalizeVector:tangent0]; 
     SCNVector3 tangent1 = [self normalizeVector: [self crossVector:axis: tangent0]]; 

     GLKVector4 tangent0GLK = GLKVector4Make(tangent0.x, tangent0.y, tangent0.z, 0); 
     GLKVector4 tangent1GLK = GLKVector4Make(tangent1.x, tangent1.y, tangent1.z, 0); 
     GLKVector4 axisGLK = GLKVector4Make(axis.x, axis.y, axis.z, 0); 

     rotMat = GLKMatrix4MakeWithColumns(tangent0GLK, tangent1GLK, axisGLK, GLKVector4Make(0, 0, 0, 1)); 

: 위의 내가 일하고 있어요 프로젝트에서입니다

_node.transform = SCNMatrix4Mult(transmat, SCNMatrix4FromGLKMatrix4(rotMat))); 

는 별도로 테스트하지 않았습니다. 십자가, 도트 및 normalizeVector는 포함되지 않습니다.

+0

이것에 대한 신속한 코드가 있습니까? –

+0

아니요, 스위프트에는 없습니다. 그러나 벡터와 매트릭스 수학에 사용하는 수학 라이브러리에 따라 스위프트와 아마 조금 비슷합니다. – Xartec