gpt4 book ai didi

c++ - opengl 3d 点云从 x,y,z 二维数组渲染

转载 作者:可可西里 更新时间:2023-11-01 16:21:31 45 4
gpt4 key购买 nike

需要在 c++ (vs2008) 中使用 openGl 进行 3d 点云显示方面的指导。我正在尝试使用纹理进行 3d 点云显示。我有 3 个二维数组(每个相同大小 1024x512)代表每个点的 x、y、z。我认为我在正确的轨道上

glBegin(GL_POINTS);
for(int i=0; i<1024; i++)
{
for(int j=0; j<512; j++)
{
glVertex3f(x[i][j], y[i][j], z[i][j]);
}
}
}
glEnd();

现在这会加载缓冲区中的所有顶点(我认为)但是从这里我不确定如何继续。或者我在这里完全错误

然后我有另一个 2D 数组(相同大小),其中包含我想用作 3D 点云和显示上的纹理的颜色数据(值从 0-255)。

最佳答案

点绘制代码没有问题。

(从长远来看,如果您必须重复绘制这些点,例如响应用户旋转 View ,您可能会遇到性能问题。将 3 个数组中的数据重新排列为 1 个,每个数组旁边有 x、y、z 值其他的可以让你使用更快的顶点数组/VBO。但现在,如果它没有坏,就不要修复它。)

要为点着色,您需要在每个 glVertex 之前使用 glColor。它必须是之前,而不是之后,因为在 OpenGL glVertex 中松散地意味着这是一个完整的顶点,绘制它。您已将数据描述为点云,因此不要将 glBegin 更改为 GL_POLYGON,将其保留为 GL_POINTS。

好的,您有另一个数组,其中包含一个字节的颜色索引值。您可以先将其用作灰度级

glColor3ub(color[i][j], color[i][j], color[i][j]);

应该显示从黑色到白色的点。

要获得每个点的真实颜色,您需要一个颜色查找表 - 我假设数据附带一个,或者您正在创建一个。它应该声明为类似

static GLfloat ctab[256][3] = {
1.0, 0.75, 0.33, /* Color for index #0 */
...
};

并在 glVertex 之前使用

glColor3fv(ctab[color[i][j]]);

我使用了浮点颜色,因为这就是最近 OpenGL 在内部使用的颜色。如果您喜欢 0..255 的颜色值,请将数组更改为 GLubyte,将 glColor3fv 更改为 glColor3ub。

希望这对您有所帮助。

关于c++ - opengl 3d 点云从 x,y,z 二维数组渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813065/

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