为啥 glm::vec3 不像浮动数组那样排序[关闭]

Posted

技术标签:

【中文标题】为啥 glm::vec3 不像浮动数组那样排序[关闭]【英文标题】:Why glm::vec3 is not ordered like a floating array [closed]为什么 glm::vec3 不像浮动数组那样排序[关闭] 【发布时间】: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 对象时我应该记住这一点吗?

【问题讨论】:

我未能从您提供的代码中复制此结果。如果您提供此行为的工作演示,我们可以仔细查看,否则,您的代码的另一部分可能存在错误。 【参考方案1】:

glm::vec3 结构中的数据排序正确。您可以通过检查 test 变量指向的内存轻松验证这一点:

您得到了奇怪的结果,因为您的测试中有问题,您显然正在向后阅读 glm::vec3 字段。您问题中的代码没有表现出这种行为。或许您应该检查一下您是如何分配数据的。

【讨论】:

你是对的,我只是错过了分配我的数据,所以它变得无序

以上是关于为啥 glm::vec3 不像浮动数组那样排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

glm::vec3 精度 C++

在 scala 中创建的图像看起来不像预期的那样。不知道为啥

如何打印通过引用传递的 glm::vec3 类型的向量值?

GLM:获取平面线交点的位置

glm::translate 与本地空间

为啥外部包含目录编译多次?