【发布时间】:2014-07-29 22:42:41
【问题描述】:
我有一个关于 OpenGL 如何处理缓冲区数据的问题,尤其是动画网格。
我正在写一个 VBO 类,我有这个功能:
void VertexBufferObject::AddData(void* p_ptr_data, UINT p_dataSize)
{
g_data = *static_cast<std::vector<BYTE>*>(p_ptr_data);
g_dataSize = p_dataSize;
}
...我传递对 aiVector3D 或 aiVector2D 向量的引用,具体取决于我传递的是顶点坐标还是纹理坐标。目前,我为每个顶点、纹理、法线、骨骼和索引使用一个 VBO(稍后会详细介绍)。无论如何,VBO 有一个 BYTE 的全局向量,它被上传到 GPU:
void VertexBufferObject::UploadDataToGPU(int p_drawingHint)
{
glBufferData(g_bufferType, g_data.size() * g_dataSize , &g_data[0], p_drawingHint);
g_dataUploaded = true;
g_data.clear();
}
现在,我的第一个问题是:我正在将一个 BYTE 向量传递给 glBufferData,显然,如果我对 g_data 的内容进行监视,每个元素都是乱码,例如 '\0',因为它们已经被强制转换为 BYTE。将这个 BYTE 向量传递给 glBufferData 可以吗? OpenGL 可以翻译吗?
我的第二个问题与我传入的数据的交错有关,以及 OpenGL 如何处理这些数据以使用 glDrawElementsBaseVertex 进行绘图。如果我想交错我的顶点信息(顶点、UV、法线),我是否还需要交错骨骼信息,或者我可以为骨骼信息设置第二个 VBO?
【问题讨论】:
-
glBufferData不在乎您的指针是什么“类型”,只要它指向具有size长度的有效内存。