需要一些方向的三维点云显示使用openGl in c++ (vs2008)。我试图做一个三维点云显示与纹理。我有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数组(相同大小),它包含颜色数据(从0到255的值),我想使用它作为三维点云和显示上的纹理。
发布于 2012-10-10 23:56:21
点画代码和现在一样好。
(长期而言,如果必须反复绘制这些点,例如响应用户旋转视图,则可能会遇到性能问题。将3个数组中的数据重新排列为1( x,y,z值相邻)将允许您使用更快的顶点数组/VBO。但是现在,如果它没有坏掉,就不要修理它。)
要对点着色,需要在每个glColor之前使用glVertex。它必须是在前面,而不是后面,因为在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。
希望这能有所帮助。
https://stackoverflow.com/questions/12813065
复制相似问题