Форум: "Игры";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
ВнизНужно сделать анимацию Найти похожие ветки
← →
MERLIN:) (2007-06-12 19:11) [0]Как сделать анимимированый спрайт.
Нарисовал спрайт так.
procedure TSprite.Draw(x, y, w, h: Integer; TexID: Cardinal);
begin
glPushMatrix;
glTranslatef(x,y,0);
glBindTexture(GL_TEXTURE_2D, texID); // Bind the Texture to the object
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_BLEND );
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f( 0, 0);
glTexCoord2f(1.0, 0.0); glVertex2f( w, 0);
glTexCoord2f(1.0, 1.0); glVertex2f( w, h);
glTexCoord2f(0.0, 1.0); glVertex2f( 0, h);
glEnd();
glPopMatrix;
end;
А как рисовать анимированый спрайт.
Что для этого надо сделать ? :)
← →
grouzd)ev © (2007-06-13 00:20) [1]Нарисовать спрайт со следющим кадром (либо наложить другую текстуру, либо - если все кадры нарисованы на одной - сместить ее)
---
... we are walking on a thin line and you better avoid the risk ...
← →
MERLIN:) (2007-06-13 01:45) [2]Я тоже думал что надо как то смещать но как это сделать.
Вы наверное делали что то подобно можете подробнее объяснить. ?
← →
Хелпер (2007-06-13 05:34) [3]
> MERLIN:) (12.06.07 19:11)
>
> Как сделать анимимированый спрайт.
GLScene TAnimationSprite.
← →
grouzd)ev © (2007-06-13 09:37) [4]ну допустим если frame_width - ширина кадра, а frame_number - номер и все кадры расположены "по горизонтали", то
glMatrixMode(GL_TEXTURE);
glTranslatef(frame_width * frame_number, 0, 0);
glMatrixMode(GL_MODELVIEW);
//рисуем спрайт
glMatrixMode(GL_TEXTURE);
glTranslatef(- frame_width * frame_number, 0, 0);
glMatrixMode(GL_MODELVIEW);
только не забудь что тогда надо в glTexCoord2f вместо единичек ставить 1 / frame_width. Плохо это тем что не получится сделать список, но ты его и не делаешь (а надо бы =). Думается можно сделать glScalef(1 / frame_width, 1, 1), а может и не можно, надо проверить =)
ps никаких "Вы"!
---
... we are walking on a thin line and you better avoid the risk ...
← →
grisme © (2007-06-13 10:55) [5]можно поизвращаться с текстурными координатами по x :o) если анимацию грузить в одну текстурину, то можно отображать текстуру начиная с т.координаты(по x) = (1/ширина_кадра)*текущий_кадр :o) тада кадры нумеруются с нуля =^^=
а вторая координата x будет соответственно = (1/ширина_кадра)*текущий_кадр + (1/шинина_кадра)
← →
MERLIN:) (2007-06-13 19:11) [6]Посмотри код чегото неработает.
Сделал картинку из трёх кадров
Вся картинка 150 х 50
каждый кадр 50 х 50
1 - красный квадрат
2 - зелёный квадрат
3 - синий квадрат
На экране вижу квадратик со смешиными в одну три текстуры.
Чучуть красного, зелёного, синего. Почему так?
программа
...
sprite.frame_width:= 50;
sprite.frame_number:= 2;
sprite.DrawAnim(200,200,50,50,anim);
...
модуль спрайтов
...
TSpriteManager = class
constructor Create;
public
Items : array of TSprite;
Count : GLuint;
TexID : uint;
TexWidth: Integer;
TexHeight: Integer;
frame_width, frame_number: integer;
...
end;
...
procedure TSpriteManager.DrawAnim(x, y, w, h: Integer; TexID: Cardinal);
begin
glPushMatrix; // Поместить все дальнейшие действия в матрицу
glTranslatef(x,y,0);
glMatrixMode(GL_TEXTURE);
glTranslatef(frame_width * frame_number, 0, 0);
glMatrixMode(GL_MODELVIEW);
glBindTexture(GL_TEXTURE_2D, texID); // Bind the Texture to the object
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_BLEND );
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f( 0, 0);
glTexCoord2f(1 / frame_width, 0.0); glVertex2f( w, 0);
glTexCoord2f(1 / frame_width, 1 / frame_width); glVertex2f( w, h);
glTexCoord2f(0.0, 1 / frame_width); glVertex2f( 0, h);
glEnd();
glMatrixMode(GL_TEXTURE);
glTranslatef(- frame_width * frame_number, 0, 0);
glMatrixMode(GL_MODELVIEW);
glPopMatrix;
end;
...
← →
grouzd)ev © (2007-06-13 23:29) [7]
glTexCoord2f(0.0, 0.0); glVertex2f( 0, 0);
glTexCoord2f(1 / frame_width, 0.0); glVertex2f( w, 0);
glTexCoord2f(1 / frame_width, 1); glVertex2f( w, h);
glTexCoord2f(0.0, 1); glVertex2f( 0, h);
Кроме того может быть проблема с текстурой размерами не-2^n. попробуй 64х256
---
... we are walking on a thin line and you better avoid the risk ...
← →
Хелпер (2007-06-14 02:35) [8]
> MERLIN:) (13.06.07 19:11) [6]
Что ты велосипед изобретаешь? В GLScene это давно есть.
TAnimationSprite.
← →
Yashin © (2007-06-15 19:45) [9]Ну дык и готовые движки есть, зачем новые писать? И вообще все уже кем то сделано зачем тогда что-то придумывать?
← →
Хелпер (2007-06-16 07:15) [10]
> Yashin © (15.06.07 19:45) [9]
> Ну дык и готовые движки есть, зачем новые писать?
Задай этот вопрос самому себе. Зачем ты пишешь свою GLScene?
← →
Yashin © (2007-06-16 18:42) [11]Я уже давно ничего не пишу
← →
MERLIN:) (2007-06-17 16:34) [12]Почему рисуется спрайт задом на перёд.
Наприммер спрайт: Игра
В программе выглядит: аргИ
Почему так? Я как то неправильно налаживаю текструру
Посмотрите код пожалуйста.
procedure TSpriteManager.DrawAnimStatic(x, y, w, h: Integer; AnimCount, Frame:integer; TexID: Cardinal);
var u:single;
begin
glPushMatrix;
DASCurAnimPos:= Frame mod AnimCount;
glBindTexture(GL_TEXTURE_2D,TexID);
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_BLEND );
u:=DASCurAnimPos;
glTranslatef(x,y,0);
glRotatef(90,0,1,0);
glBegin(GL_QUADS);
glNormal3f(0,1,0);
glTexCoord2f(1/AnimCount*u,0); glVertex2f(0,0);
glTexCoord2f(1/AnimCount*u-1/AnimCount,0); glVertex2f(w-0.5,0);
glTexCoord2f(1/AnimCount*u-1/AnimCount,1); glVertex2f(w-0.5,h-0.5);
glTexCoord2f(1/AnimCount*u,1); glVertex2f(0,h-0.5);
glEnd;
glPopMatrix;
end;
← →
Хелпер (2007-06-18 01:32) [13]
> MERLIN:) (17.06.07 16:34) [12]
> glTexCoord2f(1/AnimCount*u,0); glVertex2f(0,
> 0);
> glTexCoord2f(1/AnimCount*u-1/AnimCount,0); glVertex2f(w-
> 0.5,0);
> glTexCoord2f(1/AnimCount*u-1/AnimCount,1); glVertex2f(w-
> 0.5,h-0.5);
> glTexCoord2f(1/AnimCount*u,1); glVertex2f(0,
> h-0.5);
Местами поменяй glTexCoord2f.
А лучше возьми GLScene, а не велосипедоизобретательствуй.
← →
Еки Батыр(Два Батыра) (2007-06-19 14:44) [14]мы проходим на тонкую линию и Вы лучше избегаете риска
← →
grisme © (2007-06-19 16:52) [15]начал не с той текстурной координаты ;) частенько приходится подгонять порядок пар текстурных координат ((
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c