代码之家  ›  专栏  ›  技术社区  ›  Allen

如何将GLKMatrix4转换为GLfloat*数组?

  •  0
  • Allen  · 技术社区  · 10 年前

    我有一个 GLKMatrix4 变量,并希望使用 GLfloat *array 的值 glUniformMatrix4fv 作用我搜索了一下,但没有找到任何有用的信息。有一个函数叫做 CC3Matrix4x4PopulateFromGLKMatrix4 在cocos3d SDK中,但它复制了太多文件。我真的不想用它。

    有什么简单的方法吗 GLK矩阵4 GLfloat* array ?

    2 回复  |  直到 10 年前
        1
  •  8
  •   BDL Vyxzl    10 年前

    这个 GLKMatrix4 类有一个成员 m ,这正是您需要的阵列。

    GLKMatrix4 myMatrix = GLKMatrix4Identity;
    glUniformMatrix4fv(uniform, 1, 0, myMatrix.m);
    
        2
  •  4
  •   BurtK    9 年前

    您需要编写如下扩展名。

    import GLKit
    
    extension GLKMatrix2 {
        var array: [Float] {
            return (0..<4).map { i in
                self[i]
            }
        }
    }
    
    
    extension GLKMatrix3 {
        var array: [Float] {
            return (0..<9).map { i in
                self[i]
            }
        }
    }
    
    extension GLKMatrix4 {
        var array: [Float] {
            return (0..<16).map { i in
                self[i]
            }
        }
    }
    

    然后可以使用glUniformMatrix4fv或glUniformMatrix3fv,如下所示

    ...
    var modelViewMatrix : GLKMatrix4 = GLKMatrix4Identity
    ...
    
    glUniformMatrix4fv(self.modelViewMatrixUniform, 1, GLboolean(GL_FALSE), self.modelViewMatrix.array)