首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opengl三维点云渲染x,y,z 2d阵列

opengl三维点云渲染x,y,z 2d阵列
EN

Stack Overflow用户
提问于 2012-10-10 06:14:00
回答 1查看 7K关注 0票数 10

需要一些方向的三维点云显示使用openGl in c++ (vs2008)。我试图做一个三维点云显示与纹理。我有3个二维数组(每个相同大小的1024x512),代表每个点的x,y,z。我想我走在正确的轨道上

代码语言:javascript
复制
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的值),我想使用它作为三维点云和显示上的纹理。

EN

回答 1

Stack Overflow用户

发布于 2012-10-10 23:56:21

点画代码和现在一样好。

(长期而言,如果必须反复绘制这些点,例如响应用户旋转视图,则可能会遇到性能问题。将3个数组中的数据重新排列为1( x,y,z值相邻)将允许您使用更快的顶点数组/VBO。但是现在,如果它没有坏掉,就不要修理它。)

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

好的,您有另一个数组,它有一个字节颜色索引值。您可以先将其用作灰度级别,然后使用

代码语言:javascript
复制
glColor3ub(color[i][j], color[i][j], color[i][j]);

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

要获得每个点的真实颜色,您需要一个颜色查找表--我假设有一个随数据而来的表,或者是您正在创建的表。它应该声明如下

代码语言:javascript
复制
static GLfloat ctab[256][3] = {
    1.0, 0.75, 0.33,  /* Color for index #0 */
    ...
};

并在glVertex之前使用

代码语言:javascript
复制
glColor3fv(ctab[color[i][j]]);

我使用了浮点颜色,因为这是OpenGL现在内部使用的颜色。如果希望颜色为0..255值,则将数组更改为GLubyte,将glColor3fv更改为glColor3ub。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12813065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档