Using Eigen::Vector3f with Opengl ES 2.0 VBO
Using Eigen::Vector3f with Opengl ES 2.0 VBO
我有麻烦让Eigen::Vector3f和Opengl ES 2.0 VBO一起工作。我最初的尝试是glVertexAttribPointer(VERTEX, 3, GL_FLOAT, sizeof(VERTEX), 0)。虽然这没有画,如果我开始玩步幅值,我可以看到一个破碎的网格。这是我当前导致崩溃的代码。在我的旧代码中,我使用了简单的vector3类,由3个浮点数组成,工作得很好。
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() );
相关文章:
- OpenGL VBO Indexing ( How to compute Index Array)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 将单个未唱的 int 发送到 VBO
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- VBO必须在VAO之后绑定
- 为什么OpenGL ES 3.1+上GL_DEPTH_COMPONENT的glCheckFramebufferStatu
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- 计算着色器Open GL ES的多个输入
- OpenGL:第二个VBO破坏了第一个VBO
- Open GL ES 3.1 的计算着色器的最小工作示例
- OpenGL ES 绘制形状
- 如何告诉 VBO 处理给定的数据?(布料模拟)
- 如何使用着色器在 opengl es 中渲染四边形内部的部分纹理
- 错误:不支持 GLSL 3.30.支持的版本包括:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10
- 我们是否需要序列化 VAO 和 VBO
- OpenGL VAO VBO resize
- OpenGL ES:在顶点着色器中计算顶点位置时性能不佳
- 打开gl es 2.0为什么我的VBO不起作用
- Using Eigen::Vector3f with Opengl ES 2.0 VBO