我正在學習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,我剛剛意識到多餘的線條來自您在每行末尾插入的退化三角形。 -.- –