Войти
ПрограммированиеФорумОбщее

ZenGL Update (8 стр)

Страницы: 17 8 9 1013 Следующая »
#105
(Правка: 19:21) 19:05, 28 фев 2022

Опять маке барахлит:

[buratino@localhost FreePascal]$ make
make -C "01 - Initialization/"
make[1]: Вход в каталог `/home/buratino/Desktop/z/z2/progrr/dvizki/ZenGL Update/New-ZenGL-ZenGL_3_29/Zengl_SRC/demos/FreePascal/01 - Initialization'
rm -f *.*~
rm -f ../tmp/*.*
/home/seenkao/FreePas/fpc/bin/x86_64-linux/fpc.sh demo01.pas -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src  -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../lib/jpeg/x86_64-linux -Fu../../../lib/ogg/x86_64-linux -Fu../../../lib/theora/x86_64-linux -Fu../../../lib/zlib/x86_64-linux -Fu../../../lib/zip/x86_64-linux -FE../../../bin/x86_64-linux/ -FU../tmp/ -O3 -XsX -CX -Sd -al -odemo01 -TLINUX
make[1]: /home/seenkao/FreePas/fpc/bin/x86_64-linux/fpc.sh: Команда не найдена
make[1]: *** [all] Ошибка 127
make[1]: Выход из каталога `/home/buratino/Desktop/z/z2/progrr/dvizki/ZenGL Update/New-ZenGL-ZenGL_3_29/Zengl_SRC/demos/FreePascal/01 - Initialization'
make: *** [all] Ошибка 2

Откуда у меня на компе должен был нарисоваться каталог "/home/seenkao/FreePas/fpc/bin/x86_64-linux/fpc.sh demo01.pas"? Тот ещё прикол.

>Вы можете сами что-нибудь предложить.

И предложу.
А движение партиклов ты не делал? Там же в procedure emitter2d_Draw одним циклом делается:

                    q.Y := y1 + p.Size.Y;
                  end;

              FOR Z3:=0 TO 3 DO BEGIN //вот этот цикл смещает партиклы на величину Emitter.SDVIG_X и Emitter.SDVIG_Y
                quad[Z3].X:=quad[Z3].X+Emitter.SDVIG_X;
                quad[Z3].Y:=quad[Z3].Y+Emitter.SDVIG_Y;
                                END;

              fx2dAlpha^ := p.Alpha;
              glColor4ubv( @fx2dColor[ 0 ] );

              glTexCoord2fv( @tc[ 0 ] );
              glVertex2fv( @quad[ 0 ] );

А то как-то интересно получается - поддержка новых фич опенгээла появилась, а фифекты всё также прибиты гвоздями к одному месту.

#106
(Правка: 23:13) 23:08, 28 фев 2022

Skvoznjak
> Опять маке барахлит:
недавно всё залил с исправлениями, демки тоже подправил. Но путь в makefile до FPC тебе надо самому прописать. Либо чтоб система путь прописала. Ну и если винда, то exe добавить...

достали эти мелочи... я ещё не настолько влился, чтоб везде всё знать. ))) Как это делается, чтоб он сам определял запускаемый файл? )))

> Там же в procedure emitter2d_Draw одним циклом делается:
я посмотрю!

#107
23:16, 28 фев 2022

Skvoznjak
> поддержка новых фич опенгээла появилась
знал бы ты через что мне пришлось пройти, чтоб прицепить OpenGL к ZenGL.

Но, честно говоря, возможностей у тех кто пользуется Linux стало намного больше, чем у тех, кто пользуется Windows. Я про OpenGL. Windows не предоставляет столько расширений, сколько предоставляет Linux.

Но там и ногу сломаешь, если не знаешь куда копать...

#108
23:43, 28 фев 2022

>Но путь в makefile до FPC тебе надо самому прописать. Либо чтоб система путь прописала. Ну и если винда, то exe добавить...

>достали эти мелочи... я ещё не настолько влился, чтоб везде всё знать. ))) Как это делается, чтоб он сам определял запускаемый файл? )))

Ты это когда-то знал, просто забыл. В версии 3_28 на 23.11.21 make вполне нормально собирала все 16 демок, после чего ругалась на отсутствующий файл. Это хороший результат, откати сборку на ту версию.

#109
0:14, 1 мар 2022

И если будешь делать перемещение партиклов по экрану, то необходим и дожигатель партиклов, которые нужно резко потушить. Например вот так:

procedure emitter2d_Nahren( Emitter : zglPEmitter2D );//Дожигает задействованные эмиттеры
  var                                               
    i        : Integer;
    p        : zglPParticle2D;
begin
  if not Assigned( Emitter ) Then exit;

  with Emitter^, Emitter._private do
    begin
      i := 0;
      while i < Particles do
        begin
            list[ i ].Life := 0;
            p                     := list[ i ];
            list[ i ]             := list[ Particles - 1 ];
            list[ Particles - 1 ] := p;
            DEC( Particles );
        end;
    end;
end;        
#110
0:16, 1 мар 2022

Skvoznjak
> Ты это когда-то знал, просто забыл.
не знал, действовал по наитию. )))

> А движение партиклов ты не делал?
То, что тебя интересует, находится в procedure emitter2d_Proc( Emitter : zglPEmitter2D; dt : Double );

case Type_ of
            EMITTER_POINT:
              begin
                p.Direction := AsPoint.Direction + Random( Round( AsPoint.Spread * 1000 ) ) / 1000 - AsPoint.Spread / 2;
                p.Position  := Params.Position;
              end;
            EMITTER_LINE:
              begin
                p.Direction  := AsLine.Direction + Random( Round( AsLine.Spread * 1000 ) ) / 1000 - AsLine.Spread / 2;
                size         := ( AsLine.Size / 2 - Random( Round( AsLine.Size * 1000 ) ) / 1000 );
                p.Position.X := Params.Position.X + cos( AsLine.Direction + 90 * deg2rad ) * size;
                p.Position.Y := Params.Position.Y + sin( AsLine.Direction + 90 * deg2rad ) * size;
                if AsLine.TwoSide Then
                  p.Direction := p.Direction + 180 * ( Random( 2 ) - 1 ) * deg2rad;
              end;
            EMITTER_RECTANGLE:
              begin
                p.Direction  := AsRect.Direction + Random( Round( AsRect.Spread * 1000 ) ) / 1000 - AsRect.Spread / 2;
                p.Position.X := Params.Position.X + AsRect.Rect.X + Random( Round( AsRect.Rect.W ) );
                p.Position.Y := Params.Position.Y + AsRect.Rect.Y + Random( Round( AsRect.Rect.H ) );
              end;
            EMITTER_CIRCLE:
              begin
                angle        := Random( 360 );
                size         := Random( Round( AsCircle.Radius * 1000 ) ) / 1000;
                p.Direction  := AsCircle.Direction + Random( Round( AsCircle.Spread * 1000 ) ) / 1000 - AsCircle.Spread / 2;
                p.Position.X := Params.Position.X + AsCircle.cX + cos( angle * deg2rad ) * size;
                p.Position.Y := Params.Position.Y + AsCircle.cY + sin( angle * deg2rad ) * size;
              end;
            EMITTER_RING:
              begin
                angle        := Random( 360 );
                size         := ( AsRing.Radius1 + AsRing.Radius0 ) / 2 + Random( Round( abs( AsRing.Radius1 - AsRing.Radius0 ) * 1000 ) ) / 1000 - abs( AsRing.Radius1 - AsRing.Radius0 ) / 2;
                p.Direction  := AsRing.Direction + AsRing.Spread / 2 - Random( Round( AsRing.Spread * 1000 ) ) / 1000;
                p.Position.X := Params.Position.X + AsRing.cX + cos( angle * deg2rad ) * size;
                p.Position.Y := Params.Position.Y + AsRing.cY + sin( angle * deg2rad ) * size;
              end;
          end;               

как я понимаю, многое уже было сделано, на это надо обратить внимание! Этот код показывает как всё реализовано и как менять.

Я надеюсь у тебя демка с созданием эмиттеров осталась? Потому что она могла пролить достаточно немало информации на эмиттеры. Ведь именно та демка позволяла создавать эмиттеры. И дождь, как раз пример, что эмиттеры уже могли двигаться.

Извини, но дальше копаться не буду. Это надо переделывать полностью или не трогать. У меня просто времени на это не хватит.

+ эту часть не трогай пока, если не хочешь всё поломать, пробуй изменять параметры, вероятнее всего входящих эмиттеров.
#111
0:19, 1 мар 2022

Skvoznjak
> И если будешь делать перемещение партиклов по экрану
это не пятиминутное дело. Там надо либо многое перебрать, либо просто добавить дополнительную обработку эмиттеров. В код, что я скинул выше.

#112
(Правка: 0:38) 0:22, 1 мар 2022

Сайт ZenGL совсем сдох? Или только в России?

эта страница ещё доступна, так что можно точно успеть скачать, что ещё не скачано.

#113
1:38, 1 мар 2022

Mirrel
> Сайт ZenGL совсем сдох? Или только в России?
только из России... включай vpn чо

#114
7:35, 1 мар 2022

Mirrel
>это не пятиминутное дело. Там надо либо многое перебрать, либо просто добавить дополнительную обработку эмиттеров. В код, что я скинул выше.

Это давно сделано у меня в патче на соурцефорге

+ Показать

Просто проинформировал, потому что это действительно можно сделать быстро и позволяет сдвигать всё облако шевелящихся хреновин в эмиттере. Работу протестировал. Тут такой принцип рисовки партиклов: на каждый кадр в опенгл передаются хранящиеся в структуре координаты каждой частички эмиттера, а я даю всем этим координатам смещение для каждого цветового канала. Для удобства движущимся эмиттерам лучше всего давать координаты 0,0 а их положение на экране задавать через смещение. А то, что ты предлагаешь, это совсем другое: придумать новые типы партиклов. И если ты будешь записывать смешение в координаты движущихся хреновин, то потребуется более сложная математика. У меня же легко и просто преобразуется сразу куча уже имеющихся типов партиклов - можно один подвигать по экрану, можно другой. Надо только добавить в тип данных всего две переменные. Их там и так при инициализация целая простыня, от двух дополнительных строчек она не сильно удлинится.

>Я надеюсь у тебя демка с созданием эмиттеров осталась? Потому что она могла пролить достаточно немало информации на эмиттеры. Ведь именно та демка позволяла создавать эмиттеры. И дождь, как раз пример, что эмиттеры уже могли двигаться.

Демку с дождём не помню, но представляю. Она могла реализовываться не через то движение что надо, потому не факт что принесёт пользу в этом случае. Мой же патч всего двумя переменными может двигать по экрану всю массу движущихся дождинок эмиттера, или например двумя переменными подвинуть сразу целое облако дрыгающих "комариков", при условии, что они реализованы одним эмиттером. Говорю же, всё там просто, если найти правильное место для "врезки в трубопровод" с данными. Чтобы это место найти, пришлось долго тестировать поведение кода. Ты пытаешься врезаться в другом месте, потому находишь такие сложности.

#115
7:44, 1 мар 2022

Можно конечно переписать кучу кода. Всем эмиттерам присвоить координаты 0,0 а задаваемые пользователем (хехе) координаты сделать смещением. Но я обошёлся минимальным патчем.

#116
8:14, 1 мар 2022

Skvoznjak
> Это давно сделано у меня в патче на соурцефорге
то есть ты не понимаешь, что в процессе прорисовки должно быть как можно меньше каких-то вычислений? Все вычисления должны происходить (по возможности) за пределами прорисовки. Я не спорю, вероятнее всего это работает. Но это костыль, который может выстрелить в тот момент, когда ты от него ни чего не ждёшь.

Я не могу даже пытаться подобный код добавлять в ZenGL. Потому что "пытливые умы" могут использовать всё по своему и задать какие-нибудь данные, а потом жаловаться что что-то сломалось.

Как я буду вычислять это "что-то"?

Пойми, я не на реализации того, что подойдёт мне. Я на реализации того, что подойдёт другим. Я и так позволил себе воткнуть костыль к LCL. Но достаточно пытливые, и кто так хочет сильно LCL смогут это использовать, чтобы понимать, что данный способ решения (через таймер) не лучший.

Если бы я реализовал то, что нужно мне, я бы просто делал чтоб это работало. А как, мне бы было пофиг. Потом посмотревший мой код, сказал бы: "Что это за хрень ты тут написал? Как она вообще работает?".

Я же выкладывал код танков. Не заглядывал внутрь? Не сломал там себе голову, даже с моими комментариями?

#117
(Правка: 8:27) 8:26, 1 мар 2022

Skvoznjak
> Демку с дождём не помню, но представляю. Она могла реализовываться не через то
> движение что надо
13-я демка
Mirrel
> emitter2d_Proc

EMITTER_LINE:
              begin
                p.Direction  := AsLine.Direction + Random( Round( AsLine.Spread * 1000 ) ) / 1000 - AsLine.Spread / 2;
                size        := ( AsLine.Size / 2 - Random( Round( AsLine.Size * 1000 ) ) / 1000 );
                p.Position.X := Params.Position.X + cos( AsLine.Direction + 90 * deg2rad ) * size;
                p.Position.Y := Params.Position.Y + sin( AsLine.Direction + 90 * deg2rad ) * size;
                if AsLine.TwoSide Then
                  p.Direction := p.Direction + 180 * ( Random( 2 ) - 1 ) * deg2rad;
              end;

вот весь код, который отвечает за дождь. Это так сложно? Для того чтоб что-то изменить, достаточно добавить свой эмиттер. А внутрь (вместо этого кода, что выше) ты можешь засунуть процедуру, которую сам захочешь подменить в любой момент времени.

skalogryz
> включай vpn
ни когда не пользовался, видимо пришло время... )))

#118
(Правка: 16:22) 16:04, 1 мар 2022

Mirrel
>то есть ты не понимаешь, что в процессе прорисовки должно быть как можно меньше каких-то вычислений? Все вычисления должны происходить (по возможности) за пределами прорисовки. Я не спорю, вероятнее всего это работает. Но это костыль, который может выстрелить в тот момент, когда ты от него ни чего не ждёшь.

В движке не хватает то одной мелочи, то другой. После того, как она добавляется в код, все лишние вычисления происходят уже за пределами движка, в том числе и вышеописанные. По мне так опаснее химичить с фичами OpenGL, чем с простой логикой. Мне такие патчи понятнее, потому что почти не зависят от чёрного ящика, про логику которого можно лишь прочитать в документации и то только информацию, в которой почти не описываются грабли, то есть очень ценное знание выброшено по соображениям возможной неадекватности восприятия массовым пользователем и программистом. Пока на куче железа и ОС не протестируешь, нет уверенности что не наступил на грабли. Знать про баги надо, но писать про них не стоит - дилемма. Раз опасаешься с этим работать, твой выбор, я всегда при необходимости что-то влепить в нелюбимый огрызок могу накатить патчи на твою версию, пока она не сильно мутировала.

>13-я демка

Вот только сейчас вгляделся и заметил, что на тёмном фоне дождь идёт, а не просто случайные шумы. Очень неконтрастно при сжатии тёмной части спектра RGB монитором смотрится.

>вот весь код, который отвечает за дождь. Это так сложно?

Нарисовать улетание партикла за экран (в том числе - россыпью) просто, сложно дозировать метания по экрану.

>Я же выкладывал код танков. Не заглядывал внутрь? Не сломал там себе голову, даже с моими комментариями?

Вообще не в курсе о данном событии. Вопрос в том, что многие хорошо изучили математику, но логику понимают лишь в зачаточном состоянии, её в школе давно не преподают. Для них высшая математика, это легче лёгкого, а простая арифметика с логикой - это что-то запредельно сложное и непонятное. Достаточно написать в код чуть больше смеси логики с арифметикой и такие узкие специалисты взвоют:  "Ми не понимаемь - здесь есть говенокодддЪ!" Вот такой двойной стандарт, потому на всех угождать следует когда работаешь в коллективе и на зарплату, а не лепишь что-то на пределе сил в одиночку - тут уж неосиляторы пусть лучше бревно в своём глазу поищут.

#119
17:23, 1 мар 2022

Skvoznjak
> я всегда при необходимости что-то влепить в нелюбимый огрызок могу накатить
> патчи на твою версию, пока она не сильно мутировала.
в данном месте мутаций не предвещается. Всё настраивается на всеобщую работу с разными системами и возможностью полного использования OpenGL/OpenGL ES. + всякая фигня поверх всего этого.

А про "нелюбимый огрызок" - это ты зря. Я уже писал, что я бы лучше уже давно занялся возможностями OpenGL и что-нибудь сварганил. А ткнёшся, этого не хватает, того не хватает. Сейчас OpenGL воткнут, можно из него в основную часть заливать то, чего не хватало, при чём без особых проблем. Дёрнул функцию и не заморачиваешься, хватает чего или нет. Все расширения прицеплены к нужной функции, а константы прописаны.

Нет у меня сейчас возможностей перелопачивать эмиттеры. Я когда с фонтом бодался, на него так же немеряно времени убил. А с частицами ещё больше надо будет убить. Потому что если делать, то делать по нормальному. А там ещё со звуком беда, тоже переделывать надо. Android 64 не настроен от слова совсем (хотя что-то запустить можно). Библиотеки близки к устареванию, нужно обновление. Android x86 вообще не затрагивался, а ведь его очень полезно использовать, так как многие эмуляторы на нём сидят, не говоря что у людей есть мобилки на этих системах. Связать ZenGL с 64-х битной Delphi. 32-х битная собирается влёт.

Я задел небольшую часть. Думаешь на это надо немного времени? Ещё код на удаление в очередь поставить. А то таскаю с собой MacOS Carbon, а даже не проверяю демки под него. Есть смысл в настоящее время заниматься этим маком? Или всё, можно удалить? Нужно это людям или нет?

Хочешь помочь? Пожалуйста! Возьми протестируй эмиттеры, воткни дополнительный эмиттер, погоняй его по возможности и я воткну его ко всем остальным. Но он должен обрабатывать своё движение тогда, когда происходит это движение, а не тогда, когда он будет прорисовываться. А то окажется, что мы прорисовываем эмиттер, а его не должно быть уже.

Страницы: 17 8 9 1013 Следующая »
ПрограммированиеФорумОбщее