На главную
ПРАВИЛА 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 C++ WinAPI
    Как из одного файла с картинками (кадры анимации) загрузить часть изображения (один кадр) для текстуры.
    Похоже что это текстурный атлас.
    В текстуру загружаю bmp (128 x 128) т.е. четыре кадра (64 x 64).
    При попытке поменять 1.0f на 0.5f или на 2.0f. и т.д. выводится не то что нужно...
    ExpandedWrap disabled
          GLfloat x, y;
          x = y = 64;
          //...
          glEnable(GL_TEXTURE_2D);
          glBindTexture(GL_TEXTURE_2D, e::texture[0]);
          glBegin(GL_QUADS);
          glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 1);
          glTexCoord2f(1.0f, 0.0f); glVertex3f(x, 0, 1);
          glTexCoord2f(1.0f, 1.0f); glVertex3f(x, y, 1);
          glTexCoord2f(0.0f, 1.0f); glVertex3f(0, y, 1);
          glEnd();
          glDisable(GL_TEXTURE_2D);


    Как вывести один кадр из текстурного атласа ?
    Сообщение отредактировано: E.A. -
      Координаты начинаюся с нижнего угла, поэтому получается такой код
      для текстурного атласа 8 кадров x 8 кадров (512 x 512)
      ExpandedWrap disabled
            GLfloat x, y;
            x = 64.0f;
            y = 64.0f;
            // ...
         
            glTexCoord2f(0.0/8.0          , 7.0/8.0)          ; glVertex2d(0,0);   // показать кадр 1
            glTexCoord2f(0.0/8.0 + 1.0/8.0, 7.0/8.0)          ; glVertex2d(x,0);
            glTexCoord2f(0.0/8.0 + 1.0/8.0, 7.0/8.0 + 1.0/8.0); glVertex2d(x,y);
            glTexCoord2f(0.0/8.0          , 7.0/8.0 + 1.0/8.0); glVertex2d(0,y);
         
            //glTexCoord2f(1.0/8.0          , 7.0/8.0)          ; glVertex2d(0,0); // показать кадр 2
            //glTexCoord2f(1.0/8.0 + 1.0/8.0, 7.0/8.0)          ; glVertex2d(x,0);
            //glTexCoord2f(1.0/8.0 + 1.0/8.0, 7.0/8.0 + 1.0/8.0); glVertex2d(x,y);
            //glTexCoord2f(1.0/8.0          , 7.0/8.0 + 1.0/8.0); glVertex2d(0,y);
                                                                                   // и т.д.

      Прикреплённая картинка
      Прикреплённая картинка

      Вопрос решен.
      Сообщение отредактировано: E.A. -
        А смысл менять glVertex2f на glVertex2d? Ведь x и y всё равно остались float!
        Или просто копия с какого-то иного примера?
          Цитата
          Или просто копия с какого-то иного примера

          да, именно, пока искал ответ получилась такая свалка в коде ), нужно будет всё переписать не спеша
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script Execution time: 0,0901 ]   [ 19 queries used ]   [ Generated: 20.07.19, 16:46 GMT ]