gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:05 26 4
gpt4 key购买 nike

它是 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;
}

如何使用该函数创建新的 vector ?如何创建具有不同值的 vector ?我试图将 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);

最佳答案

vec3_t 是一个指向 header 中定义的 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 所做的那样)。

关于C gl-matrix,如何创建 vector 和矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com