Войти
ПрограммированиеФорумГрафика

OpenGL Вопросы (56 стр)

Страницы: 155 56 57 5873 Следующая »
#825
17:19, 12 мар 2023

ncuxonaT
> Почему для анимированных спрайтов и прочего подобного, как правило, используют
> 2д текстуру с атласом, а не 3д текстуру? Есть какие-то подводные камни?

В атласе можно хранить спрайты разного размера.

#826
19:58, 12 мар 2023

ncuxonaT
3d текстура с допущениями это нарезанная на равные куски 2d текстура, только ты еще будешь должен тратить доп. координату для индексации не говоря о том что если свободное место не тратится на 100%, то будут расти издержки по эффективности использования свободного места. При этом никаких преимуществ которые дает 3d текстура для спрайтов особо не использовать, а там где они будут нужны, то почему бы и нет. Какие нибудь эффекты в которых нужны плавные переходы использование 3d текстуры вполне оправдано.

#827
21:13, 12 мар 2023

ncuxonaT
Не поверишь
В рендере втылуврага так и делали анимацию в 3д текстуре
Самбыл в шоке :)

#828
0:24, 13 мар 2023

ncuxonaT
> Почему для анимированных спрайтов и прочего подобного, как правило, используют
> 2д текстуру с атласом, а не 3д текстуру? Есть какие-то подводные камни?
А зачем там 3д текстура, если всё в 2д влезает? Или речь идёт от массиве текстур, а не 3д текстуре?

#829
17:42, 13 мар 2023

stratego
> А зачем там 3д текстура, если всё в 2д влезает? Или речь идёт от массиве
> текстур, а не 3д текстуре?
Чтобы был плавный переход между кадрами, чтобы вся анимация свелась к подстановке времени в третью текстурную координату, чтобы мипы меньше занимали (1/3 для 2д и 1/7 для 3д)

#830
20:17, 13 мар 2023

Я не думал про это... интересно. Есть где почитать про это подробнее?

#831
18:08, 16 мар 2023

Я таки добрался до OpenGL 3.3
Я уже меньший ретроград и луддит, просто держу вас в курсе:)

#832
8:14, 17 мар 2023

Мои поздравления! А как же устаревший функционал? )))

#833
(Правка: 9:03) 8:56, 17 мар 2023

Mirrel
> Мои поздравления! А как же устаревший функционал? )))
Для рендера OpenGL 3.3 устаревший функционал не использую, только функционал 3 версии.

Вообще идея такая: Сделать 4 рендера.
OpenGL 1.0 (Готово)
OpenGL 2.0 (Не приступал)
OpenGL 3.0 (В процессе)
OpenGL 4.0 (Не приступал)

Функционал выше пользователь сам инициализирует, если он ему нужен. К примеру Пользователь решит использовать OpenGL 3.3. Тогда он выбирает рендер OpenGL 3.0 (выбирается #define для проекта) и для доступности функционала 3.1, 3.2, 3.3 использует #include <LDL/OpenGL/OpenGL_3_1>, <LDL/OpenGL/OpenGL_3_2>, <LDL/OpenGL/OpenGL_3_3>

Весь функционал загружается динамически.

Пример: Базовая версия всегда x.0 расширения инициализируются динамически.

  else if (Equal(3, 1))
  {
    Init_3_0();
    Init_3_1();
  }
  else if (Equal(3, 2))
  {
    Init_3_0();
    Init_3_1();
    Init_3_2();
  }
  else if (Equal(3, 3))
  {
    Init_3_0();
    Init_3_1();
    Init_3_2();
    Init_3_3();
  }
  else if (Equal(1, 3))
  {
    Init_1_0();
    Init_1_1();
    Init_1_2();
    Init_1_3();
  }

Такая идея.

Как это выглядит в коде

#include <iostream>
#include <LDL/Core/RuntimeError.hpp>
#include <LDL/Time/FpsCounter.hpp>
#include <LDL/Core/IntegerToString.hpp>
#include <LDL/Graphics/Window.hpp>
#include <LDL/Graphics/Render.hpp>
#include <LDL/OpenGL/OpenGLLoader.hpp>
#include <LDL/OpenGL/OpenGL3_3.hpp> //Включает все заголовки OpenGL3_0, OpenGL3_1, OpenGL3_2

using namespace LDL::Graphics;

int main()
{
  try
  {
    //Пользователю доступен OpenGL 3.0, но если ему нужен именно 3.3 его нужно инициализировать
    LDL::OpenGLLoader openGLLoader(3, 3);

    Window window(Point2u(0, 0), Point2u(800, 600), "Window!");

    Render render(&window);

    LDL::Events::Event report;

    LDL::Time::FpsCounter fpsCounter;
    LDL::Core::IntegerToString convert;

    while (window.GetEvent(report))
    {
      fpsCounter.Start();

      render.Begin();
      render.End();

      if (report.Type == LDL::Events::IsQuit)
      {
        window.StopEvent();
      }

      if (fpsCounter.Calc())
      {
        window.Title(convert.Convert(fpsCounter.Fps()));
        fpsCounter.Clear();
      }
    }
  }
  catch (const LDL::Core::RuntimeError& error)
  {
    std::cout << error.what() << '\n';
  }

  return 0;
}
#834
10:38, 17 мар 2023

JordanCpp
Исключения? Нуну

#835
11:09, 17 мар 2023

innuendo
> Исключения? Нуну
Почему нет?

Смотрел 16 битный MFC для Windows 3.1, так там тоже исключения.
Производительность процессоров с того времени, чуть подросла, могу себе позволить:)

#836
14:22, 23 мар 2023

Ситуация: в пиксельном шейдере приходится находить трансформацию (уникальную для фрагмента) и применять ее к двум-трем 4D-векторам.

Само преобразование состоит из трех некоммутирующих поворотов, синусы/косинусы для которых находятся очень просто.

Вопрос, как выгоднее для GPU:

- строить матрицу 4х4 (в пиксельном шейдере!) и потом ее применять

- или просто каждый вектор три раза модифицировать обычными поворотными формулами

coord1' = cos*coord1 - sin*coord2
coord2' = sin*coord1 + cos*coord2

?

Если считать по количеству отдельных операций умножения и сложения для построения матрицы и для ее применения, то вариант без матрицы раза в два выгоднее. Но если для всех этих векторно-матричных умножений в каждом ядре GPU специализированные модули, то вариант на "рассыпухе" будет хуже.

#837
14:28, 23 мар 2023

Dmitry_Milk
> Но если для всех этих векторно-матричных умножений в каждом ядре GPU специализированные модули
Давно уже нет.

#838
14:53, 23 мар 2023

}:+()___ [Smile]
> Давно уже нет

Ну я тоже так подозреваю, что устройство каждого ядра GPU упрощено в пользу количества ядер, но мало ли...

#839
2:03, 24 мар 2023

Dmitry_Milk
> Ну я тоже так подозреваю, что устройство каждого ядра GPU упрощено в пользу
> количества ядер, но мало ли...
Замерь да сравни, вроде же не так уж и затратно.

Страницы: 155 56 57 5873 Следующая »
ПрограммированиеФорумГрафика