Форумчане, доброго времени суток! Рисую объект в 2D. Хочу его перемещать по сцене зажав правую кнопу мыши, и отпустить в нужном мне месте. Код | private void mainOpenGLControl_OpenGLInitialized(object sender, EventArgs e) { SharpGL.OpenGL gl = this.mainOpenGLControl.OpenGL; gl.ClearColor(0, 0, 0, 0); gl.Viewport(0, 0, mainOpenGLControl.Width, mainOpenGLControl.Height); }
double curOrthoLeft, curOrthoRight, curOrthoBottom, curOrthoTop, aspect; private void mainOpenGLControl_Resized(object sender, EventArgs e) { SharpGL.OpenGL gl = this.mainOpenGLControl.OpenGL; gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); aspect = (double)gl.RenderContextProvider.Width / (double)gl.RenderContextProvider.Height; const double orthoLeft = 0; const double orthoRight = 1000; const double orthoBottom = 0; const double orthoTop = 1000; const double orthoZNear = 1; const double orthoZFar = -1; if (aspect > 1) { curOrthoLeft = -orthoLeft; curOrthoRight = orthoRight; curOrthoBottom = -orthoBottom / aspect; curOrthoTop = orthoTop / aspect; } else { curOrthoLeft = -orthoLeft * aspect; curOrthoRight = orthoRight * aspect; curOrthoBottom = -orthoBottom; curOrthoTop = orthoTop; } gl.Ortho(curOrthoLeft, curOrthoRight, curOrthoBottom, curOrthoTop, orthoZNear, orthoZFar); gl.MatrixMode(OpenGL.GL_MODELVIEW); }
float x_shift = 0.0f; float y_shift = 0.0f; int x_prevLoc, y_prevLoc; bool shifting = false; private void mainOpenGLControl_MouseDown(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { x_prevLoc = e.X; y_prevLoc = e.Y; shifting = true; } }
private void mainOpenGLControl_MouseUp(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { shifting = false; } }
private void mainOpenGLControl_MouseMove(object sender, MouseEventArgs e) { if (shifting) { x_shift += +(e.X - x_prevLoc); y_shift += -(e.Y - y_prevLoc); // ось win_Y направлена вниз x_prevLoc = e.X; y_prevLoc = e.Y; UpdateMainOpenGLControl(); } }
void UpdateMainOpenGLControl() { SharpGL.OpenGL gl = this.mainOpenGLControl.OpenGL; gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Translate(x_shift, y_shift, 0f); ...... }
|
Этот код работает, но объект перемещается не точно. Объект как бы отстает от курсора мышки при передвижении. И чем длиннее путь, тем длиннее это отставание становится. В чем ошибка? Спасибо! П.с.: Видимо не правильно использую метод gl.Translate(x_shift, y_shift, 0f). Не совсем понимаю какие аргументы используются. Это сообщение отредактировал(а) htzg - 11.2.2015, 11:17
|