На главную
ПРАВИЛА 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!
Или просто копия с какого-то иного примера?
Цитата
Или просто копия с какого-то иного примера

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


Рейтинг@Mail.ru
[ Script Execution time: 0,0974 ]   [ 21 queries used ]   [ Generated: 15.02.19, 23:33 GMT ]