Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 41
1

Работа с буферами вывода OpenGL

04.11.2017, 14:49. Показов 777. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как реализовать смену кадров анимации в OGL без полной перерисовки всей сцены ?
А именно, допустим, выводится на экран некая анимация.
В определённый момент, по нажатию клавиши или нет, первая анимация прерывается и выводится другая анимация по верх неё. То-есть. В качестве фона для второй анимации служит последний кадр первой анимации.
Так же в определённый момент, по нажатию клавиши или нет, вторая анимация прекращается и прекращается её отображение. Первая же в свою очередь продолжает свою анимацию.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2017, 14:49
Ответы с готовыми решениями:

Передача звука по сети и работа с буферами
Здраствуйте, сейчас пишу модуль для передачи звука по сети, на одном компе записывается, передаётся...

WaveOutOpen, waveOutWrite, работа с аудио-буферами
Привет. С сями я мало работал ранее, но сейчас возникла необходимость написать одну звуковую...

Работа с несколькими буферами обмена, для каждого - своя комбинация клавиш
Ищу программу для работы с буфером обмена. Требуется поддержка нескольких буферов, на каждый из...

Нет корректного вывода цифр в Opengl
У меня есть график на котором есть функция,цифры насечки и т.д.Но есть 1 проблема с выводом цифр.На...

1
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 41
01.03.2021, 17:53  [ТС] 2
Было решено так. Написал функцию, считывающую текстуру с буфера. Перед выводом второй анимации, выводилась полученная текстура.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Type TTexFrame = Record
      RAWTexture: mByte;
      ALPHATexture: Integer;
      RGBATexture: Integer;
  End;
Type TTexFrameList = Array Of TTexFrame;
Type TTimeBlock = Record
    FrameNumber: Integer;
    Delay: Word;
  End;
Type TTimeBlockList = Array Of TTimeBlock;
 
Type OT_Animation_Head = Record
    _PKG: String;
    _File: String;
    LastUse: Int64;
    NoFree: Boolean;
    MemoryUse: Int64;
    Signature: Cardinal;
    FrameCount: Word;
    Width: Word;
    Height: Word;
    StartX: Word;
    StartY: Word;
    Frames: TTexFrameList;
    Masks: Array Of mByte;
    TimesBlock: Array Of TTimeBlockList;
    Info: String;
  End;
function TAnimations.CreatAsViewport(Const crtX,crtY,crtWidth, crtHeight: Integer; Const aName: String): OP_Animation;
    Var Animation: OT_Animation_Head;
  begin
    Result._Index := FindAnimation(aName, aName);
    if Not (Result._Index < 0) then RemoveAnimation(Result._Index);
    Animation._PKG := aName;
    Animation._File := aName;
    QueryPerformanceCounter(Animations[High(Animations)].LastUse);
    Animation.NoFree := False;
    Animation.MemoryUse := crtWidth*crtHeight*4;
    Animation.Signature := 0;
    Animation.FrameCount := 0;
    Animation.Width := crtWidth;
    Animation.Height := crtHeight;
    Animation.StartX := crtX;
    Animation.StartY := crtY;
    SetLenGth(Animation.Frames,1);
    SetLenGth(Animation.TimesBlock,1);
    SetLenGth(Animation.TimesBlock[0],1);
    Animation.TimesBlock[0,0].FrameNumber := 0;
    Animation.TimesBlock[0,0].Delay := High(Word);
    // ALPHA текстура
    glGenTextures(1,@Animation.Frames[High(Animation.Frames)].ALPHATexture);
    glBindTexture(GL_TEXTURE_2D, Animation.Frames[High(Animation.Frames)].ALPHATexture);
    // Отключаем цикличность текстуры
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    // фильтрация
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_Alpha, crtX, crtY, crtWidth, crtHeight, 0);
    // RGBA текстура
    glGenTextures(1,@Animation.Frames[High(Animation.Frames)].RGBATexture);
    glBindTexture(GL_TEXTURE_2D, Animation.Frames[High(Animation.Frames)].RGBATexture);
    // Отключаем цикличность текстуры
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    // фильтрация
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, crtX, crtY, crtWidth, crtHeight, 0);
    Init(Result,aName,aName);
    Result._Index := AddAnimation(Animation);
  end;
0
01.03.2021, 17:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2021, 17:53
Помогаю со студенческими работами здесь

разница между буферами и строками
Какая разница между буферами и строками в С++ ?

Задача о блокировке с системе с 3 буферами
Есть следующая задача: Имеется диспечер (Д1), который с определенными вероятностями P1, P2, P3...

Можно ли захватить часть (фрагмент) окна для вывода графики openGL
Хочу в WinAPI-проекте сделать заставку на OpenGL, но при захвате контекста и выводе графики...

Рабочие примеры вывода текста на экран для OpenGL в Visual Studio 2008
Спокойно не жилось - решил подолбиться в OpenGL, но в интернете нет ни одного примера вывода текста...

Работа с OpenGl
Добрый день, подскажите пожалуйста, а вот используя библиотеку OpenGl как сделать что бы то что я...

Работа с openGL
Можно ли с языком СИ использовать openGL? Посоветуете литературу? Погуглил, выдает все с C++.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru