Я хочу выразить приведенную ниже структуру в виде массива.
struct UniformBufferObject {
glm::mat4 model;
glm::mat4 view;
glm::mat4 proj;
};
После этого массив numpy должен читаться как макет GLSL:
layout(binding = 0) uniform UniformBufferObject {
mat4 model;
mat4 view;
mat4 proj;
} ubo;
В приведенных выше утверждениях mat4
обозначает матрицу 4x4.
Ниже я создал список Python, который затем преобразую в массив Numpy (без копирования) с формой 4x4, где каждый элемент представляет собой dtype=float32
.
Вопрос: Что мне делать дальше, чтобы представить структуру UniformBufferObject
в виде массива numpy?
>>> model = [0.1, 0.1, 0.1, 1, 0.1, 0.1, 0.1, 1, 0.1, 0.1, 0.1, 1, 0.1, 0.1, 0.1, 0,]
>>> view = [0.2, 0.2, 0.2, 1, 0.2, 0.2, 0.2, 1, 0.2, 0.2, 0.2, 1, 0.2, 0.2, 0.2, 0,]
>>> proj = [0.3, 0.3, 0.3, 1, 0.3, 0.3, 0.3, 1, 0.3, 0.3, 0.3, 1, 0.3, 0.3, 0.3, 0,]
>>> modeln = np.asarray(model, dtype= 'f4').reshape(4,4)
>>> viewn = np.asarray(view, dtype= 'f4').reshape(4,4)
>>> projn = np.asarray(proj, dtype= 'f4').reshape(4,4)
>>> modeln
array([[0.1, 0.1, 0.1, 1. ],
[0.1, 0.1, 0.1, 1. ],
[0.1, 0.1, 0.1, 1. ],
[0.1, 0.1, 0.1, 0. ]], dtype=float32)
>>> viewn
array([[0.2, 0.2, 0.2, 1. ],
[0.2, 0.2, 0.2, 1. ],
[0.2, 0.2, 0.2, 1. ],
[0.2, 0.2, 0.2, 0. ]], dtype=float32)
>>> projn
array([[0.3, 0.3, 0.3, 1. ],
[0.3, 0.3, 0.3, 1. ],
[0.3, 0.3, 0.3, 1. ],
[0.3, 0.3, 0.3, 0. ]], dtype=float32)
>>>