1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89:
| void m_OglControl_MouseMove(object sender, MouseEventArgs e) { double[] d = UnProject(e.X, e.Y, 1); Console.WriteLine("{0}:{1}:{2}",d[0], d[1], d[2]);
int [] viewport = new int[4]; double [] mvmatrix = new double[16]; double[] projmatrix = new double[16]; double [] wcoord = new double[4]; double [] wcoord1 = new double[4]; double [] vector = new double[4]; int x = e.X; int y = e.Y;
Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport); Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, mvmatrix); Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, projmatrix);
double realy = viewport[3] - (int) y - 1; double objX, objY, objZ; double objX1, objY1, objZ1;
Glu.gluUnProject( (double) x, realy, 0.0f, mvmatrix, projmatrix, viewport, out objX, out objY, out objZ);
Glu.gluUnProject( (double)x, realy, 1.0f, mvmatrix, projmatrix, viewport, out objX1, out objY1, out objZ1);
glVector3F near = new glVector3F(objX, objY, objZ); glVector3F far = new glVector3F(objX1, objY1, objZ1);
glVector3F direction = far - near;
float zFactor = -near.Z / direction.Z;
float resX = (far.X * zFactor) - m_AktCenter.X; float resY = (far.Y * zFactor) - m_AktCenter.Y;
Console.WriteLine("zFactor: {0}", zFactor); Console.WriteLine("m_AktCenter.X: {0}", m_AktCenter.X); Console.WriteLine("near: {0}", near.X); Console.WriteLine("far: {0}", far.X); Console.WriteLine("Object: {0}:{1}:{2}", objX, objY, objZ); Console.WriteLine("Object1: {0}:{1}:{2}", objX1, objY1, objZ1); Console.WriteLine(); Console.WriteLine("Result: {0}", resX); Console.WriteLine();
Glu.gluUnProject( (double)x, (double)y, zFactor, mvmatrix, projmatrix, viewport, out objX1, out objY1, out objZ1);
Console.WriteLine("Object1+1: {0}:{1}:{2}", objX1, objY1, objZ1); Console.WriteLine(); } |