Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение объекта мышкой 2D, Тема избита, но я не понял... 
:(
    Опции темы
htzg
Дата 11.2.2015, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 17.4.2010

Репутация: нет
Всего: нет



Форумчане, доброго времени суток!
Рисую объект в 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.