我正在学习opengl编程的学习目的,我使用openscenegraph 围绕opengl的包装。三角带和三维网格
我的第一个目标是渲染一个三维网格,其中高度数据作为二维矩阵存储在文件中。 第一个问题:我可以使用TRIANGLE_STRIP渲染可以具有凹面或凸面区域的网格吗?
第二个问题:是否有特定的alghoritm为此目的渲染三维网格(地形)?
我从一个非常简单的网格数据开始:
10 10 10 10 10
10 10 10 10 10
10 10 5 10 10
10 10 10 10 10
10 10 10 10 10
这是一个非常简单的5x5的高度格,但结果,使用triangle_strip是遵循:
如u可以看到有一个额外的线,我不能从我的triangle_Strip算法下降。
我使用的代码是follow(考虑它是openscenegraph代码)。行和列中的 变量(int)我存储网格的尺寸。 数据是一个osg::Vec3**
指针,其中以前我读取普通值。 m_rpTerrainData是osg::ref_ptr<osg::Vec3Array>
其中我加载,正确的顺序(如triangle_strip想要)的顶点。
for(x=0;x<rows;x++)
{
for(y=0;y<columns;y++)
{
if(x<rows-1 && y<columns-1){
this->m_rpTerrainData->push_back(data[x][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
}
/*degenerate triangle because we at last of a column*/
if(x<rows-1 && y==columns-1){
this->m_rpTerrainData->push_back(data[x][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
this->m_rpTerrainData->push_back(data[x+1][0]);
}
}
}
//drop last element
this->m_rpTerrainData->pop_back();
显示一些代码。 –
第一个问题:是的。第二:你的意思是?算法应该做什么?你在额外的线路上有进展吗?你的代码看起来正确。你是否证实多余的线来自网格,而不是来自其他几何?这实际上只是从(2,1)延伸到(2,3)的一条线吗?当你使用x^2 + y^2作为网格值函数时,它看起来像什么? –
Doh,我刚刚意识到多余的线条来自您在每行末尾插入的退化三角形。 -.- –