它是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);
答案 0 :(得分:0)
vec3_t
是指向标题
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一样)。