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

标签 c++ opengl-es

我无法让 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/

相关文章:

c++ - 如何调用矩阵调色板API

iphone - 将typedef结构转换为NSMutableArray

opengl-es - OpenGL DrawElements/DrawArrays的纹理标识符数组?

c++ - 当系统时间更改时,QThread::sleep 无法正常工作

c++ - 尝试创建 BMP 文件时我的代码失败

c++ - 在 Visual Studio 2010 下制作基于 GCC 的项目构建和运行

java - 检测可用的 OpenGL ES 版本

android - 使用 OpenGL 在 Android 中使用 Canvas 的文本和字体

c++ - 仅对 QTableView 中的列显示 gridLine

c++ - 字符串算法分析的排列