C gl矩阵,如何创建向量和矩阵?
这是gl矩阵中vec3.c的代码C gl矩阵,如何创建向量和矩阵?,c,matrix,vector,C,Matrix,Vector,这是gl矩阵中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; } mat4_t mat4_cr
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;
}
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;
}
如何使用该函数包装新向量?
如何创建具有不同值的向量?
我试图将双值设置为数组,如下所示:
vec3_t vec;
vec3_t vec3_create(vec);
vec[0] = 1.0;
vec[1] = 0.0;
vec[2] = 0.0;
vec3_t vec = vec3_create(NULL); // initially a vector with 0s
vec[0] = 1.0; // set the first element to 1.0
但我的EXC\u访问权限很差。矩阵也有同样的问题
gl矩阵中mat4.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;
}
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\u访问错误
mat4_t transform_mat;
mat4_create(transform_mat);
vec3\u 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_t vec3_create(vec);
vec[0] = 1.0;
vec[1] = 0.0;
vec[2] = 0.0;
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\u mat
将指向其地址。您需要自己初始化这些值,因为它们在默认情况下没有初始化为0(就像使用vec3\u t一样)。您不需要检查calloc
是否返回null,如果内存不足,它会返回null。我的回答对您有意义吗?请检查,我正在使用平板电脑。无法验证。@Elyasin Yes vectors目前工作正常。只有那些矩阵。。。不知道现在怎么用。但我会检查文件。谢谢你更新答案。我建议做C++课程的第一个C课程(CLA)。我相信你需要学习一些基础知识。我相信这对你很有帮助。