2014-09-27 72 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上下文是否工作正常。