use*_*628 10 c++ opengl 3d point-clouds
在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();
Run Code Online (Sandbox Code Playgroud)
现在这将加载缓冲区中的所有顶点(我认为),但从这里我不知道如何继续.或者我在这里完全错了.
然后我有另一个2D数组(相同大小),包含我想在3D点云和显示器上用作纹理的颜色数据(0-255的值).
小智 2
点绘制代码原样就可以了。
(从长远来看,如果您必须重复绘制这些点,例如响应用户旋转视图,则可能会遇到性能问题。将 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]);
Run Code Online (Sandbox Code Playgroud)
它应该显示从黑色到白色的点。
为了获得每个点的真实颜色,您需要一个颜色查找表 - 我假设要么有数据附带的颜色查找表,要么有您正在创建的颜色查找表。应该声明类似
static GLfloat ctab[256][3] = {
1.0, 0.75, 0.33, /* Color for index #0 */
...
};
Run Code Online (Sandbox Code Playgroud)
并在 glVertex 之前使用
glColor3fv(ctab[color[i][j]]);
Run Code Online (Sandbox Code Playgroud)
我使用了浮点颜色,因为这是 OpenGL 目前内部使用的颜色。如果您更喜欢 0..255 的颜色值,请将数组更改为 GLubyte,将 glColor3fv 更改为 glColor3ub。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
6022 次 |
| 最近记录: |