0
SceneKit
에 비행기를 만들면 평면의 법선 벡터는 기본적으로 양의 z 축이됩니다. 다른 법선 벡터를 사용하여 평면의 방향을 바꾸고 싶습니다. 그러나, 나는 새로운 법선 벡터가 무엇인지 알고 있음에도 불구하고 평면을 올바른 위치로 회전시키는 방법을 확신하지 못합니다. 생각?SceneKit 비행기 회전
SceneKit
에 비행기를 만들면 평면의 법선 벡터는 기본적으로 양의 z 축이됩니다. 다른 법선 벡터를 사용하여 평면의 방향을 바꾸고 싶습니다. 그러나, 나는 새로운 법선 벡터가 무엇인지 알고 있음에도 불구하고 평면을 올바른 위치로 회전시키는 방법을 확신하지 못합니다. 생각?SceneKit 비행기 회전
다음은 입력 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는 포함되지 않습니다.
이것에 대한 신속한 코드가 있습니까? –
아니요, 스위프트에는 없습니다. 그러나 벡터와 매트릭스 수학에 사용하는 수학 라이브러리에 따라 스위프트와 아마 조금 비슷합니다. – Xartec