C# 基于Lat/Lon坐标的OpenGL绘制直线

C# 基于Lat/Lon坐标的OpenGL绘制直线,c#,opengl,C#,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.Widt

我需要一些帮助,从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();
以下是将lat/lon转换为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);
}
但是,当我运行应用程序时,画布上不会绘制任何内容。有什么想法吗?此外,Lat/Lon坐标是成对的:

StartLon="-118.1624997" StartLat="33.9512797" EndLon="-118.1664997" EndLat="33.9508597"
使用转换代码,I表示36.0740197,-115.1051997的XY坐标


如果有人能给我指出正确的方向,我将不胜感激

我能够复制您的代码,并成功地在给定的点之间画线。 你的两个点的纬度/经度坐标值太接近了,不易察觉,但我能看到它们之间的线条规格

基于此,我想知道您将列出在主程序中设置视口和绘制线的零件的第一个代码放在哪里


尝试渲染更简单的内容,看看您的OpenGL上下文是否正常工作。

首先,您确定OpenGL控件已成功初始化吗?你是自己做的吗?其次,为什么不在glOrtho中指定所需的坐标系,而不是自己进行计算?最后,您是否使用双缓冲和Gdi.SwapBuffers?谢谢您的回复。如何准确地用glOrtho定义坐标系?这是否意味着我可以将lat/lon坐标插入其中,并将它们绘制出来?
129.7896006
181.797964976478