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

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

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



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Окружность в OpenGL
    Доброе время суток
    Не откажите в совете (хоть и тема, я думаю, заезжена :wacko: ).
    реализовал алгоритм средней точки, использование полярных функций считаю не АЙС!!!!
    ExpandedWrap disabled
      void CGraphScena2D::_circleMidlPoint(GLdouble r,GLdouble xc,GLdouble yc)
      {  
          GLdouble x,y,xk,yk;
          GLdouble p = 5/4 - r;
       
          //Переношу точку а начало координат
          x = 0; y = r;
          xk = x; yk = y;
          
          auto now = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
       
          while (x <= y)
          {
              xk += 0.1;
              if (p < 0)
                  p += 2*x + 1;
              else
              {          
                  p += 2*(x - y) + 1;
                  yk -= 0.1;
              }
              
              glBegin(GL_LINES);
                  glVertex2d(xc+x,yc+y);
                  glVertex2d(xc+xk,yc+yk);
              glEnd();
              
              glBegin(GL_LINES);
                  glVertex2d(xc-x,yc+y);
                  glVertex2d(xc-xk,yc+yk);
              glEnd();
       
              glBegin(GL_LINES);
                  glVertex2d(xc-y,yc+x);
                  glVertex2d(xc-yk,yc+xk);
              glEnd();
       
              glBegin(GL_LINES);
                  glVertex2d(xc-y,yc-x);
                  glVertex2d(xc-yk,yc-xk);
              glEnd();
       
              glBegin(GL_LINES);
                  glVertex2d(xc-x,yc-y);
                  glVertex2d(xc-xk,yc-yk);
              glEnd();
              
              glBegin(GL_LINES);
                  glVertex2d(xc+x,yc-y);
                  glVertex2d(xc+xk,yc-yk);
              glEnd();
              
              glBegin(GL_LINES);
                  glVertex2d(xc+y,yc-x);
                  glVertex2d(xc+yk,yc-xk);
              glEnd();
       
              glBegin(GL_LINES);
                  glVertex2d(xc+y,yc+x);
                  glVertex2d(xc+yk,yc+xk);
              glEnd();
              
              x = xk,y = yk;
              
          }
       
          auto comm = (std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()) - now).count();
       
          printf_s("Время отрисовки круга... - %f(секунд)\n",(double)(comm/1000.0));
       
      }

    Но в результате отрисовывается элипс а не окружность.
    Что я сделал не корректно? :unsure: Подскажите, пожалуйста.
      В матрице модельного вида устанавливаются пропорции по Ox и Oy. Их надо учесть.

      Добавлено
      П.С. функции glBegin/glEnd архимедленные, так что много лучше вынести их за while.
        Доброе время суток.
        Спасибо за совет :thanks:
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0785 ]   [ 17 queries used ]   [ Generated: 17.07.19, 01:12 GMT ]