2012-05-27 59 views
0

我有一個由glVertex3f組成的高度圖,需要一種方法,我可以使用鼠標在某些點動態更改高度,這與Simcity等創建類似於this youtube clipOpengl Screen to coord轉換

這是我的高度圖循環創建地形

for(float x = 0.0; x < MAP_WIDTH; x += d) 
{ 
    for(float z = 0.0; z < MAP_HEIGHT; z += d) 
    { 
     glColor3f(1.0f,1.0f,1.f); 

     glBegin(GL_TRIANGLE_FAN); 

      Color(HeightMap[(int)x][(int)z]); 
      glVertex3f(x, HeightMap[(int)x][(int)z], -z); 

      Color(HeightMap[(int)x+d][(int)z]); 
      glVertex3f(x+d, HeightMap[(int)x+d][(int)z], -z); 

      Color(HeightMap[(int)x+d][(int)z+d]); 
      glVertex3f(x+d, HeightMap[(int)x+d][(int)z+d], -z+-d); 

      Color(HeightMap[(int)x][(int)z+d]); 
      glVertex3f(x, HeightMap[(int)x][(int)z+d], -z+-d); 
     glEnd(); 
    } 
} 

正如你所看到的高度地圖從二維陣列獲得其「高度」的數據。所以當用鼠標點擊地圖時,需要更改2d數組中正確的元素。

我在我的Camera類中使用了gluLookAt,如果這有什麼區別的話。

  • 什麼是最好的方式去做這件事?
  • 如何將屏幕座標轉換爲地圖座標?

旁註:我聽說glBegin/glEnd已被棄用,我會用什麼來代替,或者我根本不需要它?

回答

0

您將不得不查看頂點數組對象(VAO)來替換glBegin/glEnd。儘管如此,我認爲你仍然可以先使用它在那裏工作,然後再擔心使用最有效的API使用。

你需要的是gluUnproject它需要你的鼠標的屏幕座標,地形的模型,視圖和投影矩陣,並在對象空間中返回鼠標光標。
然後,您可以在地形上進行光線投射並提升光線與其相交的頂點。