使用OpenGL和Eigen来存储顶点数据和glVertexAttribPointer
Using OpenGL with Eigen for storing vertex data and glVertexAttribPointer
我正在尝试将glVertexAttribPointer
与特征对象结构一起使用,类似于以下内容:
struct Vertex {
Eigen::Vector3f position;
Eigen::Vector3f normal;
};
问题在于设置glVertexAttribPointer
的偏移量。由于没有对用于在 Eigen 中内部存储数据的m_data
成员的公共访问权限,因此无法使用offset
。
似乎没有好的方法可以做到这一点。我目前的方法如下:
(void*)((char*)vertices[0].Position.data() - (char*)(&vertices[0]))
,其中vertices
是一个std::vector<Vertex>
。
这绝不是好事(尤其是在现代C++中(。我怀疑是否有一个不错的解决方案,但是有什么更安全的方法可以做到这一点,或者至少如何尽可能隔离此操作,所以我不必为每次调用glVertexAttribPointer
编写它。
Eigen 文档保证Eigen::Vector3f = Eigen::Matrix<float,3,1>
的布局如下:
struct {
float data[Rows*Cols]; // with (size_t(data)%A(Rows*Cols*sizeof(T)))==0
};
换句话说,float[3]
位于Eigen::Vector3f
结构的偏移量 0。您可以将position
的偏移量和normal
原样(offsetof(Vertex, position)
和offsetof(Vertex, normal)
(传递给您的glVertexAttrib调用以获取偏移量,并sizeof(Eigen::Vector3f)
偏移量。
相关文章:
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 创建异构顶点数据数组的可移植方法
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- GLSL 将颜色数据从片段着色器发送到顶点着色器似乎总是等于 0
- 使用OpenGL和Eigen来存储顶点数据和glVertexAttribPointer
- 在现有数据结构上使用BGL算法需要什么(边和顶点作为矢量<对象*>)?
- 如何将数据从顶点着色器传递到介于两者之间的片段着色器
- BGL :获取带有数据的顶点描述符
- 如何使用OpenGL将数据发送到顶点着色器
- 尝试将顶点添加到自定义Graph数据结构时出现分段错误
- 将八叉树叶节点的顶点保存在单独的数据结构中
- 将顶点缓冲区绑定到计算着色器以修改数据
- 动态打包 OpenGL 顶点缓冲区对象的数据
- 在英特尔 CPU 上将最近的 8 个顶点插值到随机采样点时,对称 3D 网格的最有效数据布局
- 顶点数据应该以每个pertex或每个属性为基础进行布局吗
- GL顶点数据的QThread数据共享方法
- 如何在OpenGL中使用矢量和结构上传顶点数据
- 在“顶点着色器”中将纹理数据解释为“顶点”数据
- DirectX9 C++实时重新着色顶点数据
- OpenGL-加载顶点数据时glBufferData()上的SegFault