需要一些方向的三维点云显示使用OpenGL in c++ (vs2008)。我是一个全新的OpenGL,并试图做一个三维点云显示与纹理。我有3个二维数组(每个相同大小的1024x512),代表每个点的x,y,z。我想我走在正确的轨道上
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实现,但对我来说,这是一个巨大的学习过程。因此,任何指针,轻推或踢向正确的方向将不胜感激。
发布于 2013-02-05 15:28:37
您应该使用现代的OpenGL方法,忘记glBegin和glEnd。你可以用这个来学习学习现代三维图形编程 (在网络存档上)。
首先,您应该将数据放在一个线性数组中,比如(或类似的)。然后定义指向数据的opengl缓冲区,并加载着色器程序来绘制数据。在此之后,您的抽签程序将非常简单,如:
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 );这个链接显示了你需要的一切。不推荐使用示例代码,使用缓冲区和着色器更有效。
https://softwareengineering.stackexchange.com/questions/168263
复制相似问题