Black Shark Graphics Engine

Модератор: Модераторы

Re: Black Shark Graphics Engine

Сообщение BlackShark » 14.05.2021 10:57:19

Alex2013 писал(а):У меня вообще "сбой кодировки" на последней строчке проекта .


Поставил лазарус 2.0.10 и поймал то же самое. Оказывается, эта версия, в составе которой FPC 3.2.0, не прожёвывает дженерик-метод вида TBCustomTable.CreateColumn<T>(..).
Я компилировал версией FPC 3.2.1.
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 14.05.2021 14:22:10

BlackShark писал(а):Я компилировал версией FPC 3.2.1.

Понты... :wink: (Нет, иногда "транковые версии" предоставляют например единственный простой путь решения конкретных проблем с LCL, но движок то полностью "во власти творца" неужели "модные дженерики" настолько необходимы ? :roll: )
Зы
Этим кстати и немец BeRo1985 страдает .
(Несколько лет его pasvulkan пытался запустить https://github.com/BeRo1985/pasvulkan )
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 14.05.2021 14:41:33

Alex2013 писал(а):Понты...

Нет, удобство :wink:
Дженерики и в первой версии активно использовались, только таких шаблонных методов не было...
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение BlackShark » 16.05.2021 17:04:41

Доброго часа.

Провёл работу над ошибками и готов представить очередной минорный релиз версии 2.01 (https://bshark.org):
    +TBSpinEdit, TBScrollBar - добавлена отложенная прокрутка (начинается через секунду после удержания кнопки);
    +починена egl-инициализация (EGLint был неверно определён в заголовке);
    -удалён wgl (теперь контекст инициализируется только через egl);
    -TBCustomTable - дженерик метод CreateColumn<T> был удален так как FPC 3.2.0 подобное не умеет, только транковый FPC 3.2.1;
    +TBCustomTable - исправлена ошибка в перемещении курсора выделения с помощью клавиатуры;
    +TBlackSharkKDTree - минимальные и максимальные границы уменьшены до предела (-max(single); max(single)) из-за того что FPC не может копировать пределы величины double в single; тем не менее, точность позиционирования в пространстве оставлена двойная;
    +улучшен тест KD-tree (TBSTestSceneKDTree), а именно добавлены: опциональное движение объектов, опциональная отрисовка узлов дерева через каждую секунду, хелп-панель;
    +новая опция мультисэмплинга: BSConfig.MultiSamplingSamples;
    +TBSTestScrollBox - возвращён к нормальному виду (раскоментирован код);
    -TBSTestMemo, TBSTestTrueTypeSmiles - исключены, т.к. ещё не готовы (TBSTestTrueTypeSmiles на линуксе шрифт не отобразился).
Если у вас возникли проблемы инициализации на Linux, попробуйте выполнить команды:
Код: Выделить всё
sudo apt-get install libgles2-mesa-dev
sudo apt-get install libgles-dev

Напомню, что для версии Windows x64 необходимо заменить библиотеки libEgl.dll and libGLESv2.dll в корне "\bin" из "bin\Win64".

К сожалению на слабой видеокарте NVidia под Linux пока потестировать не получилось.
Однако встроенная в материнку Intel под Windows 10 на ноуте 10-летней давности дала то же быстродействие движка что и на десктопе с NVidia GTX 1660 SUPER. По крайней мере никаких заметных задержек на тесте KD-tree с 5000 движущимися объектами заметно не было.
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 17.05.2021 02:19:30

С добрым временем суток !
Хорошо бы сразу добавить поддержку ВиАр (хотя бы на уровне просмотра без поддержки контролеров ) В принципе там все довольно просто .
Если упростить мои "навороты" то основа проще некуда ...
Код: Выделить всё
procedure LoopRenderer(const View, Proj: TMatrix4f; M3D: Boolean );
begin
  glEnable(GL_DEPTH_TEST);
   glPushMatrix();                     
   glLoadIdentity();                   
   glMatrixMode(GL_PROJECTION);       
   glLoadIdentity();
   glLoadMatrixf(@Proj;);
   glMatrixMode(GL_MODELVIEW);
  glLoadMatrixf(@View);
MyRender( BaseA ,gl_render,m3d); // Вызов моего рендера .
glPopMatrix();
end;

View, Proj данные трекинга от шлема.
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 17.05.2021 10:44:10

Alex2013 писал(а):Хорошо бы сразу добавить поддержку ВиАр (хотя бы на уровне просмотра без поддержки контролеров ) ...

Если я правильно понимаю, необходимо отрисовать в одном и том же вьюпорте в разных квадратах две и более сцены???

Posted after 2 hours 7 minutes 11 seconds:
Ролик про тест KD-tree: https://youtu.be/MVrxn3jQs1U
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 17.05.2021 14:32:49

BlackShark писал(а):Если я правильно понимаю, необходимо отрисовать в одном и том же вьюпорте в разных квадратах две и более сцены???

Нет, там просто идут данные для положения каждого глаза и я пока тупо два раза просчитываю сцену (а точнее из за лени аж три - для каждого глаза и на экран) А как там все устроено с передачей изображения в шлем, я вообще не особо разбирался - работает и ладно ! Я просто нашел в коде исходного примера точку, куда можно вставить свой рендер и научился синхронизировать отображение с положением "виртуальной камеры" по данным трекинга из шлема ).
(С поддержкой контролеров еще не разбирался )

Вот что происходит "этажом выше" процедуры LoopRenderer. :idea:
Код: Выделить всё

procedure LoopVR( M3D: Boolean);
var
  VRE: VREvent_t;
  I: Integer;
  IError: EVRInputError;
  State: VRControllerState_t;
  PoseData: InputPoseActionData_t;
  Controller: TController;
  Left, Right: TMatrix4f;
  CError: EVRCompositorError;
  LeftTexture,
  RightTexture: Texture_t;
begin
  // Process OpenVR events
  while IVRSystem^.PollNextEvent(@VRE, SizeOf(VRE)) do
  begin
    case EVREventType(VRE.eventType) of
      VREvent_TrackedDeviceActivated:
        Writeln('Device activated: ', vre.trackedDeviceIndex, '(', IVRSystem^.GetTrackedDeviceClass(vre.trackedDeviceIndex), ')');
      VREvent_TrackedDeviceDeactivated:
        begin
          Writeln('Device deactivated: ', vre.trackedDeviceIndex);
          if VRE.trackedDeviceIndex = Controllers[0].DeviceID then
            Controllers[0].Side := -1
          else
          if VRE.trackedDeviceIndex = Controllers[1].DeviceID then
            Controllers[1].Side := -1;
        end;
    end;
  end;
  // Process HMD position
  IVRCompositor^.WaitGetPoses(@TrackedDevicePoses, 8, nil, 0);
  for I := 0 to 7 do
  begin
    case IVRSystem^.GetTrackedDeviceClass(I) of
      TrackedDeviceClass_Controller:
        begin
       //...
        end;
      TrackedDeviceClass_HMD:
        begin
          Poses[I] := ConvertVR34ToMatrix(TrackedDevicePoses[I].mDeviceToAbsoluteTracking);
        end;
    end;
  end;
  if TrackedDevicePoses[k_unTrackedDeviceIndex_Hmd].bPoseIsValid then
  begin
    HmdPose := Inverse(Poses[k_unTrackedDeviceIndex_Hmd]);
  end;
  Left := EyeLeftPose * HmdPose;
  Right := EyeRightPose * HmdPose;
//....

  // Render
  // Left eye
  glEnable(GL_MULTISAMPLE);
  glBindFramebuffer(GL_FRAMEBUFFER, EyeLeftFB.RenderFramebufferID);
  glViewport(0, 0, RenderWidth, RenderHeight);
  FRender:=FR_L;
     
  LoopRenderer(Left, EyeLeftProj, M3D);

   FRender:=FR_W;
// RenderVRControllers(Left, EyeLeftProj);
  glDisable(GL_MULTISAMPLE);
  glBindFramebuffer(GL_READ_FRAMEBUFFER, EyeLeftFB.RenderFramebufferID);
  glBindFramebuffer(GL_DRAW_FRAMEBUFFER, EyeLeftFB.ResolveFramebufferID);
  glBlitFramebuffer(0, 0, RenderWidth, RenderHeight, 0, 0, RenderWidth, RenderHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
  glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
  glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

  // Right eye
  glEnable(GL_MULTISAMPLE);
  glBindFramebuffer(GL_FRAMEBUFFER, EyeRightFB.RenderFramebufferID);
  glViewport(0, 0, RenderWidth, RenderHeight);
  FRender:=FR_R;
       
       LoopRenderer(Left, EyeLeftProj, M3D);

  FRender:=0;
  // RenderVRControllers(Right, EyeRightProj);
  glDisable(GL_MULTISAMPLE);
  glBindFramebuffer(GL_READ_FRAMEBUFFER, EyeRightFB.RenderFramebufferID);
  glBindFramebuffer(GL_DRAW_FRAMEBUFFER, EyeRightFB.ResolveFramebufferID);
  glBlitFramebuffer(0, 0, RenderWidth, RenderHeight, 0, 0, RenderWidth, RenderHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
  glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
  glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

// Render to monitor При переходе  к VCL оболочке этот кусок разумеется не работает
//(кроме того мне нужно было сделать чтобы программа работала и без подключения шлема  )
{-------------------
glDisable(GL_DEPTH_TEST);
  glViewport(0, 0, WIDTH, HEIGHT);
  glBindVertexArray(EyeVAO);
  glUseProgram(EyeShader.ProgramID);
  glBindTexture(GL_TEXTURE_2D, EyeLeftFB.ResolveTextureID);
  glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Pointer(0));
  glBindTexture(GL_TEXTURE_2D, EyeRightFB.ResolveTextureID);
  glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, Pointer(12));
  glBindTexture(GL_TEXTURE_2D, 0);
  glBindVertexArray(0);
  glUseProgram(0);
-----------------------}


  // Submit to HMD
  LeftTexture.handle := Pointer(EyeLeftFB.ResolveTextureID);
  LeftTexture.eType := TextureType_OpenGL;
  LeftTexture.eColorSpace := ColorSpace_Gamma;
  RightTexture.handle := Pointer(EyeRightFB.ResolveTextureID);
  RightTexture.eType := TextureType_OpenGL;
  RightTexture.eColorSpace := ColorSpace_Gamma;
  CError := IVRCompositor^.Submit(Eye_Left, @LeftTexture, nil, Submit_Default);
  if CError <> VRCompositorError_None then
    Writeln('Error(Submit_Left): ', CError);
  CError := IVRCompositor^.Submit(Eye_Right, @RightTexture, nil, Submit_Default);
  if CError <> VRCompositorError_None then
    Writeln('Error(Submit_Right): ', CError);
  // Force HMD vsync
  glFinish;
  glFlush;
  glFinish;
end;



А вообще смотри исходную демку ... https://github.com/Kagamma/OpenVR-Pascal
(Если нет шлема, то для теста можно поставить WMR-портал в режиме эмуляции (добавив обычным путем SteamVR c раширением для WMR ) или использовать смартфон с Trinus VR )
Зы
ИМХО Если OpenVR будет поддерживается на уровне более мнение простого движка это решит множество проблем "с порогом доступности" ВиАр программирования . А то сейчас там ситуация "кто в лес кто по дрова " (особенно в случае Дельфи и Лазаруса )

Добавлено спустя 3 часа 45 минут 35 секунд:
Вроде работает ... Тормоз правда изрядный .

Добавлено спустя 45 минут 29 секунд:
Впрочем у меня на том же железе то же самое ...(около 20 fps при примерно том же уровне сложности сцены )
Последний раз редактировалось Alex2013 01.03.2023 16:14:19, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 17.05.2021 20:39:15

Alex2013 писал(а):... Я просто нашел в коде исходного примера точку, куда можно вставить свой рендер и научился синхронизировать отображение с положением "виртуальной камеры" по данным трекинга из шлема ).
(С поддержкой контролеров еще не разбирался )

Зы
ИМХО Если OpenVR будет поддерживается на уровне более мнение простого движка это решит множество проблем "с порогом доступности" ВиАр программирования . А то сейчас там ситуация "кто в лес кто по дрова " (особенно в случае Дельфи и Лазаруса )



Честно, вникать в VR пока времени нет. Если подскажешь что и куда воткнуть, то без проблем. У меня сейчас можно сколько угодно рендереров создавать, хоть для одной сцены, хоть для разных. Правда создаётся он один для каждого вьюпорта, но как бы всё обсуждаемо. Для эксперимента можно создать и несколько во вьюпорте (класс bs.viewport.TBlackSharkViewPort). Рендерер создаёт свою сцену для отрисовки по умолчанию, но теоретически её ему можно подменить через соответствующее свойство Scene.

Alex2013 писал(а):Вроде работает ... Тормоз правда изрядный .
Впрочем у меня на том же железе то же самое ...(около 20 fps при примерно том же уровне сложности сцены )

Расчёты в одном потоке с GUI, плюс там инстансинг софтовый, вот если бы переложить его на железо, тогда бы пошустрее было. Когда то я его пытался реализовать, но на тот момент libGLES как оказалось его не поддерживала. В планах висит этим заняться, к следующей мажёрной версии попытаюсь воткнуть.

А откуда твоя сцена грузится? Из модели, или на лету генерируешь?
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 17.05.2021 23:03:27

BlackShark писал(а):А откуда твоя сцена грузится? Из модели, или на лету генерируешь?

И так и эдак .
1 Есть самая первая самоделка читает модели в старом текстовом формате ASC (3DS for Dos)
(Начинал еще "каркасного" софт рендера )
Без первичного парсера совсем простая штука
Код: Выделить всё
//Прорисовка модели OpenGL
procedure OGL_DrawASC  (DX_,DY_,DZ_:Single);
Var
  A,b,c,AB,BC,CA,LI:LongInt;
Var
SaCol:integer;
cube_rotation: GLFloat;
Speed:          Double;
CK:real;
begin
//Показ модели
for LI:=0 to sl.count-1 do
begin
Sscanf(sl[LI],'A:%d B:%d C:%d AB:%d BC:%d CA:%d' ,
   [@A,@B,@C,@AB,@BC,@CA]);

glBegin(GL_TRIANGLES );
CK:=RANDOM(50)/100;
glColor3f(m_rgb.r-ck,m_rgb.g-ck,m_rgb.b-ck);
With Getv(A) do  glVertex3f(DX_+x/100,DY_+y/100,DZ_+z/100);
With Getv(b) do  glVertex3f(DX_+x/100,DY_+y/100,DZ_+z/100);
With Getv(c) do  glVertex3f(DX_+x/100,DY_+y/100,DZ_+z/100);
glEnd();
end;
end;

Есть вариант с дисплейным списком

2 Самоделка 2 "Псевдо схема от ХайАсма" Идея и данные из примера к хайасму реализация моя.
Тоже "двойного действия" вариант с дисплейным списком основной "режим мерцания" дополнительный

3 Загрузка модели ОВJ ( Самоделка но не моя и чуть урезанная взята тут http://www.sulaco.co.za//opengl_project ... loader.htm )

4 Плоский "Виртуальный экран" 1-2 полностью моя поделка (Частью честно выдрана из моих же прежних проектов)

5 "Фоновая сфера"(для панорам 360*) она же "полусферический экран" довольно примитивная штука : построение сетчатой сферы в полярных координатах с текстурой . (опять же прячу в ветхозаветный "дисплейный список" )
Код: Выделить всё
//  Function to Create a sphere
//----------------------------------
procedure CreateSphere(CX, CY, CZ, Radius : glFloat;
          N: Integer; NDX, NDY:Single; var SphereDL:GlInt;Const SBS_F:byte=0);
// N = precision
var I, J ,N2: Integer;
    F1,f2,theta1,theta2,theta3 : glFloat;
    X, Y, Z, px, py, pz : glFloat;
begin
  SphereDL :=glGenLists(1);
  glNewList(SphereDL, GL_COMPILE);

    if Radius < 0 then Radius :=-Radius;
    if n < 0 then n := -n;
    if (n < 4) OR (Radius <= 0) then
    begin
      glBegin(GL_POINTS);
        glVertex3f(CX, CY, CZ);
      glEnd();
      exit;
    end;

    for J :=0 to N DIV 2 -1 do
    begin
      theta1 := (J*2*PI/N - PI/2) /ndy;
      theta2 := ((J+1)*2*PI/n - PI/2)  /ndy;;
      glBegin(GL_QUAD_STRIP);

  For I :=N downto 0 do
      begin
        theta3 := (i*2*PI/N)/NDX;


          x := cos(theta2) * cos(theta3);
          y := sin(theta2);
          z := cos(theta2) * sin(theta3);
          px := CX + Radius*x;
          py := CY + Radius*y;
          pz := CZ + Radius*z;

  //        glNormal3f(X, Y, Z);
          Case SBS_F of
          0:F1:=1-I/n;
          1:F1:=(1-I/n)/2;
          2:F1:=0.5+(1-I/n)/2;
          end;
          glTexCoord2f(f1, 2*(J+1)/n);
          glVertex3f(px,py,pz);

          X := cos(theta1) * cos(theta3);
          Y := sin(theta1);
          Z := cos(theta1) * sin(theta3);
          px := CX + Radius*X;
          py := CY + Radius*Y;
          pz := CZ + Radius*Z;

       // glNormal3f(X, Y, Z);
          glTexCoord2f(F1, 2*j/n);
          glVertex3f(px,py,pz);
        end;
      glEnd();
    end;
  glEndList();
end;



6 Сейчас пилю что-то вроде "примитивного" всех смыслах редактора (пока работает только сфера и куб но их можно "плющить" и вращать )

7 Ко всему этому безобразию (довольно криво ) прикручено управление от какой-то загадочной демки "с танком".
(Было лениво изобретать изобретать "совсем велосипед" для одноразового использования )

Добавлено спустя 17 минут 26 секунд:
BlackShark писал(а):Честно, вникать в VR пока времени нет. Если подскажешь что и куда воткнуть, то без проблем.

Хорошо попробую подготовить "пустую платформу" . Но у меня там есть непонятка с библиотекой glfw3.dll (толку от от нее ноль но без нее InitRenderer не загружает шейдеры в которых я совершенно не разбираюсь, а выкинуть полностью не получается )
Так что на старте там вот такая кривуля стоит .
Код: Выделить всё
program Select_SHA;

{$mode objfpc}{$H+}
//{$APPTYPE GUI}
{$APPTYPE CONSOLE}


uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, lazopenglcontext, GL, GLExt, glu, GLFW31, Renderer, vr, Unit1, Unit6,
  ET_utils, Coll_OBJ_add_Un_01;
  { you can add units after this }

{$R *.res}
Var
  Window0: PGLFWwindow;

procedure InitWindow;
begin
  if glfwInit = 0 then
  begin
    Writeln('Cannot init GLFW!');
    Halt;
  end;
  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
  Window0 := glfwCreateWindow(WIDTH, HEIGHT, 'OpenVR', nil, nil);
  if Window0 = nil then
  begin
    Writeln('Cannot create GLFW window!');
    Halt;
  end;
  glfwMakeContextCurrent(Window0);
// glfwSetKeyCallback(Window, @HandleKey);
  glfwSwapInterval(1);
  if not Load_GL_version_4_3_CORE then
  begin
    Writeln('OpenGL 4.3 is required!');
    Halt;
  end;
end;


procedure FreeWindow;
begin
  glfwDestroyWindow(Window0);
  glfwTerminate;
end;

begin
  InitWindow;
  InitRenderer;
  FreeWindow;

  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TMForm, MForm);
  Application.CreateForm(TCaptureForm, CaptureForm);
  Application.CreateForm(TET_Form, ET_Form);
  Application.CreateForm(TFC_ObJ_Add, FC_ObJ_Add);
  Application.Run;
end.

Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 18.05.2021 09:52:10

Практически всё GL API приведённое в примерах здесь тобой является устаревшим. В акуле такое не используется.
Что касается шейдеров, то можешь мне скинуть что нужно отрендерить и с каким шейдером, а я попробую накидать пример.
Но вообще к каждому графическому объекту (TGraphicObject) привязан шейдер т.о.:
Код: Выделить всё
Shader := BSShaderManager.Load('SimpleTexture', TBlackSharkTextureOutShader);

Сами шейдеры лежат в подпапке "Shaders".
Вот только опасаюсь что у тебя шейдеры с материалами и освещением. Ну, будет повод и с этим поразбираться..

Posted after 11 minutes 5 seconds:
Alex2013 писал(а):Но у меня там есть непонятка с библиотекой glfw3.dll (толку от от нее ноль но без нее InitRenderer не загружает шейдеры в которых я совершенно не разбираюсь, а выкинуть полностью не получается )
Так что на старте там вот такая кривуля стоит .

Шейдр не будет без неё грузиться. Шейдер, как и текстуры и прочее привязываются к контексту. А эта библиотека создаёт и инициализирует контекст. В моём случае это делается с помощью egl.
Последний раз редактировалось BlackShark 19.05.2021 13:44:12, всего редактировалось 1 раз.
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 18.05.2021 15:22:41

BlackShark писал(а):Практически всё GL API приведённое в примерах здесь тобой является устаревшим. В акуле такое не используется.

Разумеется, я и не думал что такое старье применяется "в новенькой и блестящей акуле "... :wink:


Шейдр не будет без неё грузиться. Шейдер, как и текстуры привязываются к контексту. А эта библиотека создаёт и инициализирует контекст. В моём случае это делается с помощью egl.

Вообщем покопался в коде своей технодемки и все шейдеры полностью выкинул (Часть рисует масив кубов в исходной демке , часть должна использоваться в прорисовке модели контролера )... но без инициализации glfw3.dll не инициализируется openvr_api.dll... :roll:
Но может в более продвинутом в плане инициализации "новых возможностей OpenGL" Black Shark Engine все будет нормально вообщем нужно пробовать .

Добавлено спустя 16 часов 22 минуты 33 секунды:

Кстати по моему "акуле" очень не хватает внятных примеров, "мегадемка" это хорошо, но потрошить ее довольно сложно . ИМХО нужно более четко показать ее возможное применение .

1 "Офисная часть " показать красивую визуализацию данных ( Можно взять простой пример БД добавить и добавить карту (простую ГИС) и графики )

2 В акуле есть отличная возможность для созданий алгоритмических и просто мнемонических схем неплохо сделать простой редактор МС.

3 Не знаю что том с возможностью делать игры но парочка простейших "астероидов" и например 3д тетрис или 3д-лабиринт точно лишними в качестве примеров не будут.

4 Отличным примером был бы "генератор ландшафтов" то есть простейший 3д редактор. (возможно с генерацией сцен "WebVR" благо там все довольно просто устроено )

Код сцены "Hello, World! - A-Frame"
Код: Выделить всё
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello, World! - A-Frame</title>
    <meta name="description" content="Hello, World! - A-Frame">
    <script src="aframe.min.js"></script>
</head>
  <body>
    <a-scene>
    <a-assets>
        <img id="box-texture" src="assets/preview.png">
        <img id="plane-texture" src="assets/mYmmbrp.jpg">
    </a-assets>
    <a-box position="-1 0.5 -3" rotation="0 45 0" material="src: #box-texture" ></a-box>
   <a-animation attribute="position" to="0 2.2 -5"
    direction="alternate" dur="2000"
    repeat="indefinite">
</a-animation>

</a-box>
   <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E">
    </a-sphere>
     
<a-cylinder position="1 0.75 -3" radius="0.5" height="1.5"
     color="#FFC65D" >
      </a-cylinder>
      <a-plane material="src: #plane-texture"
position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>

<a-sky color="#0C0C0C"></a-sky>
    </a-scene>
  </body>
</html>

Подробнее читать тут .
https://habr.com/ru/post/440694/

5 О примере с поддержкой OpenVR я уже писал но добавлю что его можно сделать совсем простым вроде просмотрщика "панорам 360*" но с красивым интерфейсом баго в акуле его сделать плевое дело.
Но разумеется совсем неплохо смотрелся бы например и простой видео плеер .

Зы
Разумеется уважаемый автор может справедливо сказать "Вот и займись! А то опять изобретатель ковров самолетов пожаловал" :wink: . Что на это ответь ? "Я в деле!" но надеюсь на подсказки и взаимодействие.
Последний раз редактировалось Alex2013 01.03.2023 16:15:38, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 19.05.2021 12:51:48

Alex2013 писал(а):Кстати по моему "акуле" очень не хватает внятных примеров, "мегадемка" это хорошо, но потрошить ее довольно сложно . ИМХО нужно более четко показать ее возможное применение .

1 "Офисная часть " показать красивую визуализацию данных ( Можно взять простой пример БД добавить и добавить карту (простую ГИС) и графики )

2 В акуле есть отличная возможность для созданий алгоритмических и просто мнемонических схем неплохо сделать простой редактор МС.

3 Не знаю что том с возможностью делать игры но парочка простейших "астероидов" и например 3д тетрис или 3д-лабиринт точно лишними в качестве примеров не будут.

4 Отличным примером был бы "генератор ландшафтов" то есть простейший 3д редактор. (возможно с генерацией сцен "WebVR" благо там все довольно просто устроено )

5 О примере с поддержкой OpenVR я уже писал но добавлю что его можно сделать совсем простым вроде просмотрщика "панорам 360*" но с красивым интерфейсом баго в акуле его сделать плевое дело.
Но разумеется совсем неплохо смотрелся бы например и простой видео плеер .


Спасибо за интересные идеи. Теперь, когда, как я надеюсь, более менее стабилизировалась архитектура можно и обратить внимание на прикладные вещи, для чего собственно и создавалось...
Ещё конечно мне не даёт покоя хардварный инстансинг, без которого создавать, например, какие то ландшафтные штуки начинать не стоит, а так же Vertex Arrays Object который заявлен в ES3 и вроде тоже должен давать профит в скорости... В общем базу тоже есть куда развивать, особенно если смотреть в сторону стандарта ES3.

Alex2013 писал(а):Зы
Разумеется уважаемый автор может справедливо сказать "Вот и займись! А то опять изобретатель ковров самолетов пожаловал" :wink: . Что на это ответь ? "Я в деле!" но надеюсь на подсказки и взаимодействие.


На то я и сделал проект открытым чтоб понять насколько это актуально/необходимо для сообщества, а так же получить не только пинок в нужном направлении но и помощь в разработке... :wink:
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 19.05.2021 22:13:59

BlackShark писал(а):помощь в разработке

Я бы рад и с этим помочь, но уровень понимания программирования под новейшие возможности OpenGL увы почти отсутствуют. (я и в "классике" еще слишком слаб)
Зы
ИМХО Актуальность очень важно качественно продемонстрировать . Если есть видимый прикладной эффект то всем почти плевать как он достигается и есть ли возможность задействовать все самые свежие технологии (технологическая продвинутость это круто но если ее невидно невооруженным глазом то отличить её от результатов применения легаси технологий на относительно свежем железе практически невозможно. )

Древний quake2 1997 года... + текстуры допиленные примерно в 2018-м году
https://i.playground.ru/p/0o_lAEDfhStd4N5vcnN_Kw.jpeg
Разумеется это уровень графики даже не начала 10-х но это тот самый ужасный Q2 с его изначально непередаваемым ощущением "мыла во рту" ! Но поднятый до уровня quake 4.
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение Alex2013 » 21.05.2021 12:44:50

Вот это я понимаю "Привет мир !!" Муа-ха-ха! 8) :lol:
"Знакомьтесь: Акула это Мир - Мир это Акула!"


Да, это пока "честная подделка" к тому же "с пылу жару" и c какой-то "желтухой " в освещении . (ВиАр изображение строится не напрямую "Акулой", а захватывается с окна, но честно из самой программы ) но даже так эту "псевдо платформу" чуть доделав, вполне можно заставить использовать данные трекинга строя все изображение сцены акулой, а потом показывая результат в "полно шлемном" режиме.(режими "голографического окна " сейчас сделан просто для наглядности )
Но главный смысл этой поделки в проверке принципиально совместимости акулы и OpenVr в одной программе ( Там в полне могло быть нечто мешающие их совместной работе принципиально.)
Зы
Сразу вопрос: как делать скриншот сцены в битмап или текстуру средствами самой "акулы"? (а то "захват по хембеллу" хоть работает, но как-то это через "Африку в Европу")
Последний раз редактировалось Alex2013 01.03.2023 16:16:47, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2943
Зарегистрирован: 03.04.2013 11:59:44

Re: Black Shark Graphics Engine

Сообщение BlackShark » 21.05.2021 17:02:46

Alex2013 писал(а):Вот это я понимаю "Привет мир !!" Муа-ха-ха! 8) :lol:
"Знакомьтесь: Акула это Мир - Мир это Акула!"

Вау, круто)
Alex2013 писал(а):Сразу вопрос: как делать скриншот сцены в битмап или текстуру средствами самой "акулы"? (а то "захват по хембеллу" хоть работает, но как-то это через "Африку в Европу")

Код: Выделить всё
TBlackSharkViewPort.Rederer.Screenshot()

Не быстрая штука, но это glReadPixels так работает.
Закомментируй пока в этом методе (Screenshot) всё кроме glReadPixels. Не помню уже зачем я отрисовывал в FBO, а потом оттуда копировал, но FBO пока не очень стабильно работает в текущей версии...

Вспомнил зачем в FBO отрисовывал. Это чтоб захват можно было выполнить не только в окне вьюпорта, но и за его пределами
Аватара пользователя
BlackShark
новенький
 
Сообщения: 44
Зарегистрирован: 20.05.2019 12:52:15

Пред.След.

Вернуться в Графика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru
cron