C gl-matrix,如何创建向量和矩阵?

时间:2015-06-29 16:57:42

标签: c matrix vector

它是gl-matrix中vec3.c的代码。

vec3_t vec3_create(vec3_t vec) {
vec3_t dest = calloc(sizeof(double_t), 3);

if (vec) {
    dest[0] = vec[0];
    dest[1] = vec[1];
    dest[2] = vec[2];
} else {
    dest[0] = dest[1] = dest[2] = 0;
}

return dest;
}

如何使用该功能创建新的载体? 如何创建具有不同值的矢量? 我试图将double值设置为这样的数组:

vec3_t vec;
vec3_t vec3_create(vec);
vec[0] = 1.0;
vec[1] = 0.0;
vec[2] = 0.0;

但我得到了EXC_BAD_ACCESS。对矩阵也有同样的问题。

gl-matrix中的mat4.c中的代码。

mat4_t mat4_create(mat4_t mat) {
mat4_t dest = calloc(sizeof(double), 16);

if (mat) {
    dest[0] = mat[0];
    dest[1] = mat[1];
    dest[2] = mat[2];
    dest[3] = mat[3];
    dest[4] = mat[4];
    dest[5] = mat[5];
    dest[6] = mat[6];
    dest[7] = mat[7];
    dest[8] = mat[8];
    dest[9] = mat[9];
    dest[10] = mat[10];
    dest[11] = mat[11];
    dest[12] = mat[12];
    dest[13] = mat[13];
    dest[14] = mat[14];
    dest[15] = mat[15];
}

return dest;
}

EXC_BAD_ACCESS。

mat4_t transform_mat;
mat4_create(transform_mat);

1 个答案:

答案 0 :(得分:0)

vec3_t是指向标题

中定义的double的指针
typedef double *vec3_t;

从标题中您还可以找到一些文档,它们将告诉您如何使用它:

/*
 * vec3_t - 3 Dimensional Vector
 */

/*
 * vec3_create
 * Creates a new instance of a vec3_t
 *
 * Params:
 * vec - Optional, vec3_t containing values to initialize with. If NULL, the 
 * vector will be initialized with zeroes.
 *
 * Returns:
 * New vec3
 */
vec3_t vec3_create(vec3_t vec);

所以你可能想做这样的事情:

vec3_t vec = vec3_create(NULL); // initially a vector with 0s
vec[0] = 1.0;                   // set the first element to 1.0

关于矩阵:

mat4_t transform_mat = mat4_create(NULL);

这将分配内存,transform_mat将指向其地址。您需要自己初始化值,因为它们默认情况下未初始化为0(与vec3_t一样)。