На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Перетаскивание объекта. GLUT.
    Здравствуйте. Пытаюсь написать простейшую игру, но не хватает мозгов всё правильно реализовать.

    Столкнулся с проблемой перевода координат мыши в оконные координаты.

    Неужели всё так сложно?
    Простое перетаскивание 2d объекта.

    Сильно не ругайте, пытался реализовать перетаскивание квадрата.
    Конвертирование координат в функции void MouseMotion. Сильно не ругайте.

    Скрытый текст
    ExpandedWrap disabled
      #include <GL/glut.h>
       
      void display();
      void mouse(int button, int state, int x, int y);
      void MouseMotion(int x , int y);
       
      double X=0.5, Y=0.5;
      int dx, dy;
      int ButtonStatus = 0;
       
      void GLUT_CALL_FUNC()
      {
              glutDisplayFunc(display);
              glutMouseFunc(mouse);
              glutMotionFunc(MouseMotion);
      }
       
      void MY_INIT()
      {
              glClearColor(1.0, 1.0, 1.0, 1.0);
      }
       
      void display()
      {
              glClearColor(0.0,0.0,0.0,0.0);
              glClear(GL_COLOR_BUFFER_BIT);
              glColor3f(1.0,1.0,1.0);
              glBegin(GL_POLYGON);
              glVertex3f(X,Y,0.0);
              glVertex3f(X+0.25,Y,0.0);
              glVertex3f(X+0.25,Y+0.25,0.0);
              glVertex3f(X,Y+0.25,0.0);
              glEnd();
       
              glFlush();
      }
       
      void mouse(int button, int state, int x, int y)
      {
              if(button==GLUT_LEFT_BUTTON && state == GLUT_DOWN)
              {
                      ButtonStatus = 1;
                      dx=x, dy=y;
              }
       
              else if(button == GLUT_LEFT_BUTTON && state == GLUT_UP)
              {
                      ButtonStatus = 0;
              }
      }
       
       
      void MouseMotion(int x , int y)
      {      
              if(ButtonStatus == 1)
              {
              X+= (static_cast <double> (x-dx)/600.0)/10;
              Y+= (static_cast <double> (dy-y)/600.0)/10;
              glutPostRedisplay();
          {
      }
       
      int main(int argc,char *argv[])
      {
          glutInit(&argc, argv);
          glutInitWindowSize(600,600);
          glutInitWindowPosition(0,0);
          glutCreateWindow("Test");
          GLUT_CALL_FUNC();
          MY_INIT();
          glutMainLoop();
       
              return 0;
      }


    Может кто-то поможет исправить?
    Или посоветует годную литературу?

    Мне пока нужно только 2d и только для самых примитивных действий.

    Спасибо.
      Возможно, что так:
      ExpandedWrap disabled
        void MouseMotion(int x , int y)
        {
            if( ButtonStatus == 1 )
            {
                X += (static_cast <double> (x-dx)/600.0)/10;
                Y += (static_cast <double> (dy-y)/600.0)/10;
                dx = x, dy = y; // теперь положение стало таким
                glutPostRedisplay();
            }
        }
      Но лучше назовите не dx, а oldX как-нибудь, а то путаница возникает.
      Сообщение отредактировано: Славян -
        Цитата Prosto_Toxa @
        Мне пока нужно только 2d

        use gluOrtho2D, glVertex2f...
        Сообщение отредактировано: shm -
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0214 ]   [ 14 queries used ]   [ Generated: 18.05.24, 13:23 GMT ]