Координаты OpenGL

Всем привет. Я понимаю то это заезженная тема, но у меня есть проблема.....Вопрос следующий:
Мне нужно перевести координаты WinForm в координаты GL....я это сделал, но есть косяк, а именно, узнаю координаты верхнего правого угла и правого нижнего угла:
/*http://esate.ru, DeKaN*/

Point3D P1 = ConvertP(new Point(AnT.Width, 0), Z);
Point3D P2 = ConvertP(new Point(AnT.Width, AnT.Height), Z);

где Z - радиус вектор (т.е. расстояние от начала координат до нашей точки). парадокс в том, что координаты p1.X != p2.X, и координаты p1.Y !=p2.Y....Расхождение по X небольшое (начинается с тысячных)....оно меня не волнует так как расхождение по Y (в сотых) т.е например p1.Y=3.508...., а p2.Y=3.538.....
В чем может быть проблема?

вот код:
/*http://esate.ru, DeKaN*/

public static Point3D ConvertP(Point p, double inZ)
      {
        Point3D P1, P2, Dir;
        double x, y, z;

        int vx = p.X, vy = AnTH - p.Y - 1;
        int[] viewport = new int[4];
        double[] projection = new double[16];
        double[] modelview = new double[16];
        Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport);
        Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, projection);
        Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, modelview);
        int[] zz = new int[1];
        Gl.glReadPixels(vx, vy, 1, 1, Gl.GL_DEPTH_COMPONENT, Gl.GL_FLOAT, zz);
        Glu.gluUnProject(vx, vy, 0, modelview, projection, viewport, out x, out y, out z);
        P1 = new Point3D(x, y, z);
        Glu.gluUnProject(vx, vy, 1, modelview, projection, viewport, out x, out y, out z);
        P2 = new Point3D(x, y, z);
        Dir = new Point3D();
        Dir = P1 - P2;
        Dir.Normalize();

        Point3D A = new Point3D(0, 0, 2 * P1.Z + inZ);
        Point3D n = new Point3D(0, 0, -1);
        double t = n * (A - P1);
        Point3D P = P1 + t * Dir;
        double R = Math.Sqrt(P.X * P.X + P.Y * P.Y + P.Z * P.Z);
        double addz = 0;
        while (Math.Abs(R - inZ) > 0.00001)
        {
           double add= Math.Abs(R - inZ);
           if (R > inZ) addz -= add;
           else addz += add;
           A = new Point3D(0, 0, 2 * P1.Z + inZ + addz);
           n = new Point3D(0, 0, -1);
           t = n * (A - P1);
           P = P1 + t * Dir;
           R = Math.Sqrt(P.X * P.X + P.Y * P.Y + P.Z * P.Z);
        }
        return P;
      }

Ну а Point3D это вектор:
/*http://esate.ru, DeKaN*/

class Point3D
   {
      public double X, Y, Z;
      public Point3D()
      {
        this.X = 0;
        this.Y = 0;
        this.Z = 0;
      }
      public Point3D(double X, double Y, double Z)
      {
        this.X = X;
        this.Y = Y;
        this.Z = Z;
      }

      public void Normalize()
      {
        double Lenght = Math.Sqrt(X * X + Y * Y + Z * Z);
        this.X /= Lenght;
        this.Y /= Lenght;
        this.Z /= Lenght;
      }

      #region Перегрузка операторов
      public static Point3D operator +(Point3D P1, Point3D P2)
      {
        Point3D tmp = new Point3D();
        tmp.X = P1.X + P2.X;
        tmp.Y = P1.Y + P2.Y;
        tmp.Z = P1.Z + P2.Z;
        return tmp;
      }
      public static Point3D operator -(Point3D P1, Point3D P2)
      {
        Point3D tmp = new Point3D();
        tmp.X = P1.X - P2.X;
        tmp.Y = P1.Y - P2.Y;
        tmp.Z = P1.Z - P2.Z;
        return tmp;
      }
      public static double operator *(Point3D P1, Point3D P2)
      {
        return P1.X * P2.X + P1.Y * P2.Y + P1.Z * P2.Z;
      }
      public static Point3D operator *(double D, Point3D P)
      {

        Point3D tmp = new Point3D();
        tmp.X = P.X * D;
        tmp.Y = P.Y * D;
        tmp.Z = P.Z * D;
        return tmp;
      }
      #endregion
   }
0       1071        18.03.2011        4

0  
19.03.2011 00:00:00
Меня немного пугает, что никто не отвечает 0_о. Ладно отпишусь завтра.
0  
21.03.2011 00:00:00
Ага… есть такое… На GameDev тоже задал этот вопрос, и там молчат все… Мне это уже не надо, т.к. решил свою проблему другим путём, но почему всё-таки считает по разному (а не синхронно), это вопрос((
0  
28.03.2011 00:00:00
Помню такой предмет: математические основы моделирования. На нем мы формулами быстро перегоняли трехмерные объекты в спроецированные на плоскость экрана.

Все формулы были даны в зависимости от типа проекции и делалось все очень точно. Попробую найти методичку на эту тему — по памяти не так просто :)
0  
28.03.2011 00:00:00
делалось все очень *просто

:)
^