为什么 glm::vec3 不像浮动数组那样排序
Why glm::vec3 is not ordered like a floating array
我正在从这个网站学习 openGL https://learnopengl.com
画一个简单的三角形,本站提供的第一个例子是使用float数组:
float triangle[] = {
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f // top
};
当然很好用。但是除了这个例子之外,我还尝试使用一个带有 glm::vec3 的基本结构,如下所示:
struct Position {
glm::vec3 pos;
};
然后为了存储与浮点数组相同的数据,我只是做了一个简单的位置数组,如下所示:
Position leTriangle[3];
leTriangle[0].pos = glm::vec3(-0.5f, -0.5f, 0.0f);
leTriangle[1].pos = glm::vec3(0.5f, -0.5f, 0.0f);
leTriangle[2].pos = glm::vec3(0.0f, 0.5f, 0.0f);
(当然这只是为了测试是否可行)
然后在使用 glBufferData 和 glVertexAttribPointer 将我的位置数组发送到 GPU 后,三角形不再出现。所以,只是为了看看我发送的数组是否与示例浮动数组相似,我这样做了:
float* test = (float*)&leTriangle;
for(int e = 0; e < ((12/4) * 3); e++,test++){
std::cout << *test << std::endl;
}
而不是打印相同的浮动数组,它打印这个:
0.0f,-0.5f,-0.5f,// left
0.0f,-0.5f,0.5f, // right
0.0f,0.5f,0.0f // top
X 和 Z 值已反转。所以我猜GLM数据的顺序不是我想的那样
谁能解释一下为什么 GLM 中的数据是这样排序的?我应该尊重这个顺序还是应该尝试推翻它?也许这并不重要,这是我在放置 3D 对象时应该考虑的事情吗?
glm::vec3
结构中的数据排序正确。您可以通过检查 test
变量指向的内存来轻松验证这一点:
你得到了奇怪的结果,因为你的测试有问题,你显然在向后阅读 glm::vec3
个字段。您问题中的代码没有表现出这种行为。也许您应该检查一下您是如何分配数据的。
我正在从这个网站学习 openGL https://learnopengl.com
画一个简单的三角形,本站提供的第一个例子是使用float数组:
float triangle[] = {
-0.5f, -0.5f, 0.0f, // left
0.5f, -0.5f, 0.0f, // right
0.0f, 0.5f, 0.0f // top
};
当然很好用。但是除了这个例子之外,我还尝试使用一个带有 glm::vec3 的基本结构,如下所示:
struct Position {
glm::vec3 pos;
};
然后为了存储与浮点数组相同的数据,我只是做了一个简单的位置数组,如下所示:
Position leTriangle[3];
leTriangle[0].pos = glm::vec3(-0.5f, -0.5f, 0.0f);
leTriangle[1].pos = glm::vec3(0.5f, -0.5f, 0.0f);
leTriangle[2].pos = glm::vec3(0.0f, 0.5f, 0.0f);
(当然这只是为了测试是否可行)
然后在使用 glBufferData 和 glVertexAttribPointer 将我的位置数组发送到 GPU 后,三角形不再出现。所以,只是为了看看我发送的数组是否与示例浮动数组相似,我这样做了:
float* test = (float*)&leTriangle;
for(int e = 0; e < ((12/4) * 3); e++,test++){
std::cout << *test << std::endl;
}
而不是打印相同的浮动数组,它打印这个:
0.0f,-0.5f,-0.5f,// left
0.0f,-0.5f,0.5f, // right
0.0f,0.5f,0.0f // top
X 和 Z 值已反转。所以我猜GLM数据的顺序不是我想的那样
谁能解释一下为什么 GLM 中的数据是这样排序的?我应该尊重这个顺序还是应该尝试推翻它?也许这并不重要,这是我在放置 3D 对象时应该考虑的事情吗?
glm::vec3
结构中的数据排序正确。您可以通过检查 test
变量指向的内存来轻松验证这一点:
你得到了奇怪的结果,因为你的测试有问题,你显然在向后阅读 glm::vec3
个字段。您问题中的代码没有表现出这种行为。也许您应该检查一下您是如何分配数据的。