ios - 您如何使用 OpenGL 从偏航、俯仰和滚动中导出旋转矩阵?

标签 ios objective-c opengl matrix augmented-reality

我尝试了多种方法,但预期的矩阵不是我想要的。我想生成由姿态给出的相同旋转矩阵,但它是根据偏航、俯仰和滚动值生成的。如果有我不知道的内置函数,我会很乐意使用它。

    [self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue] withHandler:^ (CMDeviceMotion *motionData, NSError *error) {
        CMRotationMatrix r = motionData.attitude.rotationMatrix;

        GLKMatrix4 baseModelViewMatrix;
        baseModelViewMatrix = GLKMatrix4Make(r.m11, r.m21, r.m31, 0.0f,
                                             r.m12, r.m22, r.m32, 0.0f,
                                             r.m13, r.m23, r.m33, 0.0f,
                                             0.0f,  0.0f,  0.0f,  1.0f);



        GLKMatrix4 baseModelViewMatrix2 = GLKMatrix4Identity;

        double yaw = motionData.attitude.yaw;
        double pitch = motionData.attitude.pitch;
        double roll = motionData.attitude.roll;
        baseModelViewMatrix2 = GLKMatrix4RotateZ(baseModelViewMatrix2, roll);
        baseModelViewMatrix2 = GLKMatrix4RotateX(baseModelViewMatrix2, pitch);
        baseModelViewMatrix2 = GLKMatrix4RotateY(baseModelViewMatrix2, yaw);
        //baseModelViewMatrix = GLKMatrix4Transpose(baseModelViewMatrix);



        _scene.rotationMatrix = baseModelViewMatrix2;


    }];

最佳答案

我最终想出了一个解决方案。我写了这个函数。

GLKMatrix4 rotationMatrix(double yaw, double pitch, double roll){
    GLKMatrix4 rotationMat = GLKMatrix4Identity;

    rotationMat = GLKMatrix4RotateZ(rotationMat, roll);
    rotationMat = GLKMatrix4RotateX(rotationMat, pitch);
    rotationMat = GLKMatrix4RotateY(rotationMat, yaw);
    rotationMat = GLKMatrix4Make(rotationMat.m00, rotationMat.m02, rotationMat.m01, 0.0f,
                                 rotationMat.m20, rotationMat.m22, rotationMat.m21, 0.0f,
                                 rotationMat.m10, rotationMat.m12, rotationMat.m11, 0.0f,
                                 0.0f,  0.0f,  0.0f,  1.0f);
    return rotationMat;
}

关于ios - 您如何使用 OpenGL 从偏航、俯仰和滚动中导出旋转矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232082/

相关文章:

objective-c - 检查整个枚举的相等性?

objective-c - Obj-C/Cocoa 接线接口(interface)对象

ios - 编辑包含 NSFetchedResults 的 TableView

ios - 如何在特定位置将View添加到ScrollView?

java - LWJGL (OpenGL) VBO 模型矩阵未正确渲染

ios - 从用户位置 ios 查找最近的注释?

php - 安全地发送 PHP 从 iOS 获取信息

iOS - 部分界面未显示在模拟器中 - Interface Builder

c++ - 如何在 OpenGL 中使用 alpha 透明度?

c++ - OpenGL:如何计算我的鼠标在 3d 空间中指向的角度?