2014-09-27 101 views
1

我需要一些關於從經緯度座標繪製線到OpenGL畫布的幫助。基於Lat/Lon座標的OpenGL繪製線

Gl.glViewport(0, 0, simpleOpenGlControl.ClientRectangle.Width, simpleOpenGlControl.ClientRectangle.Height); 
Gl.glMatrixMode(Gl.GL_PROJECTION); 
Gl.glLoadIdentity(); 
Gl.glOrtho(0, simpleOpenGlControl.ClientRectangle.Width, 0, simpleOpenGlControl.ClientRectangle.Height, -1, 1); 

Gl.glMatrixMode(Gl.GL_MODELVIEW); 
Gl.glLoadIdentity(); 

Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); 
Gl.glBegin(Gl.GL_LINES); 
Gl.glVertex2d(getX(36.0740197, -115.1051997), getY(36.0740197, -115.1051997)); 
Gl.glVertex2d(getX(36.0740197, -115.0845997), getY(36.0740197, -115.0845997)); 
Gl.glEnd(); 

Gl.glFlush(); 

而這裏的方法,將緯度/經度對XY:

public static double ToRadians(double valueInDegrees) 
{ 
    return (Math.PI/180) * valueInDegrees; 
} 

public double getY(double lat, double lon) 
{ 
    double mercN = Math.Log(Math.Tan((Math.PI/4) + (ToRadians(lat)/2))); 
    return (simpleOpenGlControl.ClientRectangle.Height/2) - (simpleOpenGlControl.ClientRectangle.Width * mercN/(2 * Math.PI)); 
} 

public double getX(double lat, double lon) 
{ 
    return (lon + 180) * (simpleOpenGlControl.ClientRectangle.Width/360); 
} 

然而,當我運行應用程序,沒有什麼是畫在畫布上。有任何想法嗎?此外,緯度/經度座標是對:

StartLon="-118.1624997" StartLat="33.9512797" EndLon="-118.1664997" EndLat="33.9508597" 

與轉換代碼,我這些XY座標36.0740197, -115.1051997

129.7896006 
181.797964976478 

如果有人能在正確的方向指向我,我更欣賞它!

+0

首先,你確定OpenGL控件已經成功初始化了嗎?你自己在做嗎?其次,爲什麼不在'glOrtho'中指定所需的座標系而不是自己進行計算?最後,你使用雙緩衝和'Gdi.SwapBuffers'嗎? – Dmitry 2014-09-27 08:17:47

+0

感謝您的回覆。我如何用'glOrtho'定義一個座標系?這是否意味着我可以將lat/loncoordinates插入到它中,並且會繪製它們? – Zach 2014-09-27 15:57:39

回答

0

我能夠複製你的代碼,併成功地繪製給定點之間的線條。 (你的緯度/經度座標值兩點太接近了,但我能看到它們之間的一條線)

基於此,我想知道你把你​​的第一個代碼列表您在主程序中設置視口和畫線的部分)。

嘗試渲染更簡單的東西,看看你的OpenGL上下文是否工作正常。