Всем привет. У меня возникла проблема. Необходимо вывести русский текст на экран. Никто не сталкивался с этим???
Всем привет. Мне опять нужна помощь))
Я столкнулся со следующей проблемой...я рисую сетку из прямоугольников, и на каждый меш накладываю текстуру...Если буду рисовать GL_QUAD_STRIP, то всё хорошо, но если просто GL_QUADS, то границы стаовятся видными.
Как мне исправить это??? Пробовал
не помогло.
Я столкнулся со следующей проблемой...я рисую сетку из прямоугольников, и на каждый меш накладываю текстуру...Если буду рисовать GL_QUAD_STRIP, то всё хорошо, но если просто GL_QUADS, то границы стаовятся видными.
Как мне исправить это??? Пробовал
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR); Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP_TO_EDGE); Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP_TO_EDGE); |
не помогло.
Всем привет. Я понимаю то это заезженная тема, но у меня есть проблема.....Вопрос следующий:
Мне нужно перевести координаты WinForm в координаты GL....я это сделал, но есть косяк, а именно, узнаю координаты верхнего правого угла и правого нижнего угла:
где Z - радиус вектор (т.е. расстояние от начала координат до нашей точки). парадокс в том, что координаты p1.X != p2.X, и координаты p1.Y !=p2.Y....Расхождение по X небольшое (начинается с тысячных)....оно меня не волнует так как расхождение по Y (в сотых) т.е например p1.Y=3.508...., а p2.Y=3.538.....
В чем может быть проблема?
вот код:
Ну а Point3D это вектор:
Мне нужно перевести координаты WinForm в координаты GL....я это сделал, но есть косяк, а именно, узнаю координаты верхнего правого угла и правого нижнего угла:
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.....
В чем может быть проблема?
вот код:
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 это вектор:
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 } |