我正在从此网站https://learnopengl.com学习openGL
[绘制一个简单的三角形,本网站提供的第一个示例使用浮点数组:
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;
};
然后存储与float数组相同的数据,我只做了一个简单的Position数组,如下所示:
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将我的Position数组发送到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对象时是否应该记住这一点?