If inDrag Then
Dim A As Single ' 这个值和Z轴有关系。
A = -0.000459 * zoom + 0.00864 ' 这个函数不太准确。
xOffset = A * (e.X - lastX) + MyOffX
yOffset = A * (lastY - e.Y) + MyOffY
End If
Public Sub getObjectCoordinates(ByVal WinX As Double, ByVal WinY As Double)
Dim modelMatrix(16) As Double ' 模型矩阵
Dim projMatrix(16) As Double ' 投影矩阵
Dim viewport(4) As Integer ' 视口
Gl.glPushMatrix() '//保存当前矩阵
Gl.glLoadIdentity() '//复原矩阵
Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX, modelMatrix)
Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX, projMatrix)
Gl.glGetIntegerv(Gl.GL_VIEWPORT, viewport)
Dim z As Double, y As Double, x As Double
Dim ret As Integer, realY As Integer
'ret = Glu.gluProject(xOffset, yOffset, zoom, modelMatrix, projMatrix, viewport, x, y, z)
'Debug.WriteLine(String.Format("gluProject:x={0},y={1},xOff={2},yOff={3}", x, y, xOffset, yOffset))
realY = CInt(viewport(3) - WinY - 1)
Gl.glReadPixels(CInt(WinX), realY, 1, 1, Gl.GL_DEPTH_COMPONENT, Gl.GL_FLOAT, z)
Debug.WriteLine(String.Format("zBuffer={0}", z))
ret = Glu.gluUnProject(WinX, realY, 0, modelMatrix, projMatrix, viewport, x, y, z)
ret = Glu.gluUnProject(WinX, realY, 1, modelMatrix, projMatrix, viewport, x, y, z)
Gl.glPopMatrix() '//恢复原矩阵
End Sub