为什么glm :: vec3不像浮动数组那样排序

问题描述 投票:0回答:1

我正在从此网站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对象时是否应该记住这一点?

c++ opengl glm-math
1个回答
0
投票

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

您将得到奇怪的结果,因为测试中的某些错误,因此您显然正在向后读取glm::vec3字段。您问题中的代码没有表现出这种现象。也许您应该检查如何分配数据。

© www.soinside.com 2019 - 2024. All rights reserved.