Понедельник, 23 Декабря 2024, 01:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Работа с текстурами в OpenGL
MorfayДата: Понедельник, 11 Июля 2011, 01:22 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Изучаю OpenGL и C++. Решил попробовать написать движок, чтобы лучше разобраться. Как создать текстуру и отобразить я понял, но хочу сделать анимацию - при запуске проги, чтобы анимация создавалась автоматически, а после просто вызывать функцией нужную анимацию. Технологию знаю, но не могу понять, как "отрезать" часть спрайта с нужным изображением и присвоить ее новой текстуре. По ходу, прошу объяснить мне как происходит генерирование и выбор текстуры (glGentexture() и glBindTexture()) - что конкретно происходит при использовании команд (я знаю, что это генерация и выбор текстуры - мне нужно более подробная информация что и как происходит, для "общего развития"). Все это в OpenGL (загрузка изображения и другие фишки через SDL). Заранее спасибо
ValterДата: Понедельник, 11 Июля 2011, 18:37 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Совет: используйте готовые middleware решения.
У Вас есть несколько способов:

  • Вручную на CPU переписывать пиксели
  • Шейдеры (GLSL)
  • Спрайты


К сожалению под рукой на осталось кода с использованием OpenGL. А ковырять чужие движки не охота (А Вам советую Ogre, Irrlicht посмотрите что сделали они). Но у меня есть решение для DX9. Это можно легко сделать при помощи стандартного DXUT, хотя опять таки не советую его использовать.
Но показываю просто, чтобы идейка была ясна:
Code

OnD3D9CreateDevice(...)
{
V_RETURN( D3DXCreateTextureFromFileEx( pd3dDevice, L"Название файла", D3DX_DEFAULT (можно поставить фиксю ширину), D3DX_DEFAULT (можно поставить фиксю высоту),
                     D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED,
                     D3DX_DEFAULT, D3DX_DEFAULT, 0,
                     NULL, NULL, &имя переменной куда занести результата ) );
}
OnD3D9FrameRender(...)
{
RECT rec;
rec.left=0;
rec.top=64;
rec.right=64;
rec.bottom=128;
V(g_pDonutSprite->Draw(g_pDonutTexture, &Кусочек который Вам нужен (Rect), NULL, &pos, D3DCOLOR_XRGB(255,255,255)));
}

Ну как-то так это делается спрайтами в DX. Хотя способов может быть уйма тут скорее Ваша фантазия, конечно алгоритм может оказаться жадным, но Вы сами сделали этот выбор, начав писать свой велосипед.
P.S. извиняюсь за неформатированый код, писал прямо в textarea форума.
С уважением Андрей.


Сообщение отредактировал Valter - Понедельник, 11 Июля 2011, 18:40
getNameДата: Понедельник, 11 Июля 2011, 18:59 | Сообщение # 3
JAVA. Написано однажды, работает везде.
Сейчас нет на сайте
ishodniki.ru
там вроде было что-то такое




Пришельцы! 2012 (рассказ)
MorfayДата: Вторник, 12 Июля 2011, 01:10 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Или я что-то не понял, или вы. Я использую спрайты. Но мне не нравится, что каждый раз, когда нужно проиграть анимацию, она будет генерировать изображение (кусок спрайта) раз за разом. После прочтения разных мануалов и статей на форуме, выяснил, что рисование текстурами (наложение спрайта или куска на квадратную текстуру и вывод на экран) самое лучшее и менее затратное. Вот и хотел узнать, как распихать части спрайта по текстуркам, сформировать их в анимацию, а потом просто выводить сформированное на экран. В планах, загрузка всех анимашек при начале игры, чтобы в процессе не было возможных тормозов. Вот я и хочу узнать, можно ли и если можно, то как присвоить отрезанную часть спрайта новой сгенерированной текстуре (отобразить часть спрайта могу, не знаю именно как присвоить)
KornivalДата: Вторник, 12 Июля 2011, 01:27 | Сообщение # 5
The Witcher
Сейчас нет на сайте
Quote (Morfay)
Вот я и хочу узнать, можно ли и если можно, то как присвоить отрезанную часть спрайта новой сгенерированной текстуре (отобразить часть спрайта могу, не знаю именно как присвоить)

Это называется блиттинг. В SDL делалось функцией SDL_BlitSurface, в GDI BitBlt. Как в OpenGL делается не знаю, но запрос в гугле "блиттинг в OpenGL" выдает много интересного.
MorfayДата: Вторник, 12 Июля 2011, 03:12 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Похоже, это то что мне нужно. Но вот русскоязычной нормальной информации не нашел, а английский не очень у меня. Может кто объяснить (или дать ссылку), как происходит блиттинг в OpenGL?
KornivalДата: Вторник, 12 Июля 2011, 18:57 | Сообщение # 7
The Witcher
Сейчас нет на сайте
Эта тема объясняется в любой книжке по OpenGL, вот к примеру в этой. Страница 379 dry

Сообщение отредактировал Kornival - Вторник, 12 Июля 2011, 18:57
MorfayДата: Среда, 13 Июля 2011, 01:03 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Мда, интернет развратил мой юный ум - ведь такая книга есть и у меня... Большое спасибо за помощь. Тему можно закрывать - куда копать я понял.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг