gpt4 book ai didi

c++ - 在 Opengl ES 2.0 VBO 中使用 Eigen::Vector3f

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:55 25 4
gpt4 key购买 nike

我无法让 Eigen::Vector3f 和 Opengl ES 2.0 VBO 协同工作。我最初的尝试是 glVertexAttribPointer(VERTEX, 3, GL_FLOAT , sizeof(Vertex), 0 )。虽然如果我开始使用步幅值,这什么也没有画,但我可以看到一个破损的网格。这是我当前导致崩溃的代码。在我的旧代码中,我使用了由 3 个 float 组成的简单 vector3 类,它工作正常。

struct Vertex {

Eigen::Vector3f pos ;

Eigen::Vector3f normal;
};


std::vector<Vertex> Vertices;

std::vector<ushort16> Indices;

...


GLuint vao;
uint32 vboID, vboID2;

glGenVertexArraysOES(1, &vao);
glBindVertexArrayOES(vao);


glGenBuffers(1, &vboID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, GL_STATIC_DRAW , sizeof(Vertex) * Vertices.size(), &Vertices[0]);
glBindBuffer(GL_ARRAY_BUFFER, 0);


glGenBuffers(1, &vboID2);
glBindBuffer(GL_ARRAY_BUFFER, vboID2);
glBufferData(GL_ARRAY_BUFFER, GL_STATIC_DRAW , sizeof(ushort16) * m_vIndices.size(), &Indices[0]);
glBindBuffer(GL_ARRAY_BUFFER, 0);


glBindBuffer(GL_ARRAY_BUFFER, vboID);
glEnableVertexAttribArray(VERTEX);
glVertexAttribPointer(VERTEX, 3, GL_FLOAT , sizeof(Vertex), &Vertices[0].pos );

glEnableVertexAttribArray(NORMAL);
glVertexAttribPointer(NORMAL, 3, GL_FLOAT , sizeof(Vertex), &Vertices[0].normal );

glBindBuffer(GL_ARRAY_BUFFER, vboID2);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);


...

最佳答案

解决了我的问题:

我删除了:

glBufferData(GL_ARRAY_BUFFER, GL_STATIC_DRAW , sizeof(Vertex) * Vertices.size(), &Vertices[0]);

我将这些行更改为

glVertexAttribPointer(VERTEX, 3, GL_FLOAT , sizeof(Vertex), Vertices[0].pos.data() );

....
glVertexAttribPointer(NORMAL, 3, GL_FLOAT , sizeof(Vertex), Vertices[0].normal.data() );

关于c++ - 在 Opengl ES 2.0 VBO 中使用 Eigen::Vector3f,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com