SceneKit平面旋转

问题描述 投票:0回答:1

当我在SceneKit中创建一个平面时,平面的法向量默认为正z轴。我想通过使用不同的法向量来重新定向平面。但是,我不知道如何将平面旋转到正确的位置,即使我知道新的法向量应该是什么。思考?

ios scenekit
1个回答
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));

然后,您可以使用乘法将其应用于平面节点的transform属性:

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

以上是我正在研究的项目,没有单独测试过。不包括cross,dot和normalizeVector。

© www.soinside.com 2019 - 2024. All rights reserved.