【发布时间】:2020-01-31 02:48:38
【问题描述】:
我正在从这个网站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;
};
然后为了存储与浮点数组相同的数据,我只是做了一个简单的位置数组,如下所示:
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 对象时我应该记住这一点吗?
【问题讨论】:
-
我未能从您提供的代码中复制此结果。如果您提供此行为的工作演示,我们可以仔细查看,否则,您的代码的另一部分可能存在错误。