OpenGL 3D点云渲染从X、Y、Z 2D数组

10

我需要关于在c++ (vs2008)中使用openGl显示3d点云的指导。 我正在尝试使用纹理显示3d点云。我有3个2D数组(每个都是相同大小的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();

现在这个代码似乎将所有的顶点加载到了缓冲区中,但是我不确定下一步该怎么做。或者我完全错误了。

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


我没有每个点的RGB值,所以无法使用glColor3*(r,g,b)。我正在尝试将最后一个数组(具有0-255值)用作3D点云的纹理。从glBegin(GL_POLYGON)中可以看出,您建议创建网格????再次提问是如何从上面的内容进一步发展。还是我完全走错了方向。 - user1733628
好的,上面的代码基本上会从您的3个坐标数组中绘制一个点云。没有真正填充的“缓冲区”,您直接在即时模式下进行绘制。关于颜色:据我所知,每个顶点有一个无符号字节值?因此,您应该定义这些值如何表示某些颜色。您可以直接将它们用作强度,或者您可以使用调色板,或者完全不同的东西。 - derhass
1个回答

2

现有的点绘制代码已经很好。

(从长远来看,如果您需要重复绘制这些点,例如响应用户旋转视图,可能会遇到性能问题。将3个数组中的数据重新排列成一个数组,并将x、y、z值相邻,可以使用更快的顶点数组/VBOs。但是目前来说,如果不出故障,就不要修理它。)

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

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

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

这段内容涉及到IT技术,需要翻译成中文。在显示黑白变化的点时,您需要一个颜色查找表 - 我假设数据中有一个,或者您正在创建一个。它应该声明为:

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。

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接