gpt4 book ai didi

performance - 加速 IO 绑定(bind) OpenGL 应用程序

转载 作者:行者123 更新时间:2023-12-03 11:15:14 24 4
gpt4 key购买 nike

我最近一直在研究点云播放器,理想情况下,它应该能够可视化激光雷达捕获的地形数据点,并以大约 30fps 的速度顺序显示它们。然而,我似乎已经因 PCI-e IO 而陷入困境。

我需要为每一帧加载一个存储在内存中的大点云,然后根据高度计算颜色图(我使用的是类似于 matlab 的喷射图),然后将数据传输到 GPU。这适用于点 < 100 万的云捕获。然而,在大约 200 万个点时,这开始减慢到每秒 30 帧以下。我意识到这是大量数据(每点 200 万帧 * [每点 3 个 float + 每个色点 3 个 float ] * 每个浮点 4 个字节 * 每秒 30 帧 = 每秒约 1.34 GB )

我的渲染代码现在看起来像这样:

glPointSize(ptSize);
glEnableClientState(GL_VERTEX_ARRAY);
if(colorflag) {
glEnableClientState(GL_COLOR_ARRAY);
} else {
glDisableClientState(GL_COLOR_ARRAY);
glColor3f(1,1,1);
}
glBindBuffer(GL_ARRAY_BUFFER, vbobj[VERT_OBJ]);
glBufferData(GL_ARRAY_BUFFER, cloudSize, vertData, GL_STREAM_DRAW);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbobj[COLOR_OBJ]);
glBufferData(GL_ARRAY_BUFFER, cloudSize, colorData, GL_STREAM_DRAW);
glColorPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_POINTS, 0, numPoints);
glDisableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);

vertData 和 colorData 的指针每帧都会改变。

我希望能够以每秒至少 30 帧的速度播放,即使以后使用可能达到每帧 700 万个点的大型点云也是如此。这可能吗?或者也许将它们网格化并构建高度图并以某种方式显示它会更容易?我对 3-D 编程还是很陌生,所以任何建议都将不胜感激。

最佳答案

如果可以,使用一维纹理实现彩色贴图。您只需要 1 个纹理坐标而不是 3 种颜色,它也会使顶点对齐 128 位。

编辑:您只需要从颜色图中创建纹理并使用 glTexCoordPointer 而不是 glColorPointer(当然还要更改 [0, 1] 范围内纹理坐标的顶点颜色值)。这是线性插值的 6 纹素颜色图:

// Create texture
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_1D, texture);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

// Load textureData
GLubyte colorData[] = {
0xff, 0x00, 0x00,
0xff, 0xff, 0x00,
0x00, 0xff, 0x00,
0x00, 0xff, 0xff,
0x00, 0x00, 0xff,
0xff, 0x00, 0xff
};
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 6, 0, GL_RGB, GL_UNSIGNED_BYTE, colorData);
glEnable(GL_TEXTURE_1D);

关于performance - 加速 IO 绑定(bind) OpenGL 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392173/

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