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

具有纹理的x,y,z 2d阵列的三维点云渲染
EN

Software Engineering用户
提问于 2012-10-10 06:51:50
回答 1查看 6.5K关注 0票数 2

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

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

我知道,对于某些人来说,这可能是一个非常基本的OpenGL实现,但对我来说,这是一个巨大的学习过程。因此,任何指针,轻推或踢向正确的方向将不胜感激。

EN

回答 1

Software Engineering用户

发布于 2013-02-05 15:28:37

您应该使用现代的OpenGL方法,忘记glBegin和glEnd。你可以用这个来学习学习现代三维图形编程 (在网络存档上)。

首先,您应该将数据放在一个线性数组中,比如(或类似的)。然后定义指向数据的opengl缓冲区,并加载着色器程序来绘制数据。在此之后,您的抽签程序将非常简单,如:

代码语言:javascript
复制
glClearColor( 0.2f, 0.0f, 0.0f, 0.0f );
glClear( GL_COLOR_BUFFER_BIT );

glUseProgram( myShaderProgram );

glBindBuffer( GL_ARRAY_BUFFER, posBufferObject );
glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, 0 );

glBindBuffer( GL_ARRAY_BUFFER, colBufferObject );
glVertexAttribPointer( 1, 1, GL_UNSIGNED_BYTE, GL_FALSE, 0, 0 );

glEnableVertexAttribArray( 0 );
glEnableVertexAttribArray( 1 );

glDrawArrays( GL_POINTS, 0, 1024*512 );

glDisableVertexAttribArray( 0 );
glDisableVertexAttribArray( 1 );
glUseProgram( 0 );

这个链接显示了你需要的一切。不推荐使用示例代码,使用缓冲区和着色器更有效。

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

https://softwareengineering.stackexchange.com/questions/168263

复制
相关文章

相似问题

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