Преобразование Matrix4fv в SCNMatrix4 - PullRequest
0 голосов
/ 26 июня 2019

У меня есть некоторые матричные данные в виде

float * projection = calloc(16, sizeof(float));

Отлично вписывается в

glUniformMatrix4fv(pos_proj_box, 1, 0, projection);

Как я могу преобразовать эту матрицу (по существу, массив с плавающей запятой длиной 16), чтобы она поместилась в SCNMatrix4?

Если я сделаю это, то выйдет не в ту позицию:

n.transform = SCNMatrix4(m11: projection[0], m12: projection[1], m13: projection[2], m14: projection[3], m21: projection[4], m22: projection[5], m23: projection[6], m24: projection[7], m31: projection[8], m32: projection[9], m33: projection[10], m34: projection[11], m41: projection[12], m42: projection[13], m43: projection[14], m44: projection[15])

EDIT

Так что теперь я думаю, что преобразование в порядке, но что-то не так с моим кодом. Кажется, что плоскость всегда квадрат, а не изменяется на размер, введенный в матрицу. Он также не соответствует должным образом, как если бы он находился под некоторым углом от правильного положения ...

let m = GLKMatrix4(m: (projection[0],projection[1],projection[2],projection[3],projection[4],projection[5],projection[6],projection[7], projection[8],projection[9],projection[10],projection[11],projection[12],projection[13],projection[14],projection[15]))

let plane = SCNPlane()
plane.firstMaterial?.diffuse.contents = UIColor.blue

let n = SCNNode()
n.transform = SCNMatrix4FromGLKMatrix4(m)
n.geometry = plane

let scnScene = SCNScene()
overlayView.scene = scnScene

scnScene.rootNode.addChildNode(n)
...