Teraz jest poniedziałek, 19 listopada 2018, 15:52




Stwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
 Plugin do AviSynth używający OpenGL 
Autor Wiadomość
Moderator
Moderator
Avatar użytkownika

Dołączył: czwartek, 22 lipca 2004, 22:55
Posty: 3253
Post Plugin do AviSynth używający OpenGL
witam.
interesuje mnie dosyć myślę nietypowy problem. do tej pory używałem programów do 3d i montażu nieliniowego, jednak ostatnio coraz bardziej skłaniam się ku rozwiązaniom programistycznym. dawnymi czasy programowałem w assemblerze 6502 a potem w pascalu. od tego czasu jednak zmieniło się wszystko i wszystkiego trzeba się uczyć od nowa. jako, że nie jestem w stanie opanować wszystkiego chciałbym was prosić o pomoc w rozwiązaniu kilku problemów.
zamierzam wykorzystać OpenGL do renderowania scen jako pluginu do AviSynth. AviSynth jest frameserverem służącym do skryptowej edycji materiału video.
Do AviSynth'a można napisać własne pluginy w C++ operujące na dostarczanym przez hosta obrazie lub oddające wygenerowany (pobrany) obraz.
:!: zrobić plugin do AviSyntha w C++ wykorzystujący procedury OpenGL do generowania scen czy obiektów.
:!: trudność polega na tym, że wyrenderowana scena musi zostać do pamięci komputera (np. w rozdzielczości PAL 720x576 przy zachowaniu PixelAspectRatio 1,066 :!: ) a najlepiej aby można było przekazać/określić adres w pamięci.

idea jest prosta, jednak im więcej się przebijam, przez wszelkie materiały odnośnie interfejsu pluginów czy OpenGL widzę, że sam nie podołam.

żeby mniej-więcej określić o co mi chodzi przedstawiam obrazek z kursu OpenGL przepuszczony przez AviSynth'a używającego pluginu w C++ do efektu glow. dobrze by było móc użyć również pluginu, do wyrenderowania tego obrazka, prawda? 8)
Obrazek

pierwsze, co chciałbym uzyskać to możliwość wyrenderowania obrazu obiektu do pamięci, jako strumienia RGBA. dalej wzbogacić go o możliwość komunikacji ze środowiskiem AviSynth - np. przyjmowanie obrazu jako reflection jak w przykładzie i oddawanie strumienia RGBA, najlepiej za pomocą wskaźnika.
brzmi groźnie :twisted: myślę, że byłaby to niezła inicjatywka, w każdym razie warto się nad tym schylić.
Obrazek

pozwoliłem sobie jeszcze dla unaocznienia narysować obrazek, który pozwoli się wam trochę zorientować w tym pomyśle. będę się starał na bieżąco dokładać różne aspekty poruszonego przeze mnie tematu. mam nadzieję, że wątek zainteresuje kilka osób. a na razie obrazek:
Obrazek

pozdrawiam i zachęcam do dyskusji. mam nadzieję, że znajdzie się kilku speców od C++ i OpenGL, no i oczywiście AviSynth'owców. :mrgreen:

w razie czego jestem na GG->2491715.

_________________
Obrazek
GG: 2491715 peaceant(at)wp.pl


piątek, 21 kwietnia 2006, 14:31
Zobacz profil
Aktywny bywalec
Aktywny bywalec
Avatar użytkownika

Dołączył: poniedziałek, 15 września 2003, 12:38
Posty: 541
Post 
Piękna idea. Co do pobierania obrazka z OpenGL to całość jest niezbyt skomplikowana:

glReadBuffer(GL_BACK_LEFT);
glReadPixels(0,0,width,height,GL_RGBA,GL_UNSIGNED_BYTE, image);

gdzie image jest wskażnikiem do unsigned char (oczywiście musisz zaalokować pamięć).

Jeżeli chodzi o proporcje to tu jeszcze nie znalazłem metody dla GL, ale jak znajdę to dam znać, a na razie mógłbyś robić obraz o rozmiarze o odpowiednich proporcjach i przy pixelu kwadratowym a anastępnie go przeskalować.

Co do mapowania środowiskowego, które jest na tym imbryczku, to najłatwiej jest zrobić je jako teksturę.

A myślałeś może o tym, żeby użyć też jakiegoś języka shaderów w przyszłości, skoro ma być to w OpenGL to tu narzuca się wręcz GLSL, ale może być też Cg.

Pozdrawiam
Ulv

_________________
"It has secret program of ultimate destruction. All SONYs do." - Largo
"I won't drink your blood because I like you" - Arcueid Brunestud


poniedziałek, 24 kwietnia 2006, 11:45
Zobacz profil
Moderator
Moderator
Avatar użytkownika

Dołączył: czwartek, 22 lipca 2004, 22:55
Posty: 3253
Post 
witam,

dzięki za odpowiedź.
wykorzystywanie shaderów - oczywiście! ale to w dalszej kolejności, najpierw chciałbym wogóle spiąć te elementy, o których pisałem i sprawić, że będą działać ;).

mapowanie imbryczka to tylko przykład, chodzi o to, aby tak napisać procedurę (szablon procedury w sumie) aby odbierała również dane obrazu z zewnątrz (na przykład obraz mapowania)

najważniejszą sprawą jest połączenie tego z AviSynthem... dopiero się zabrałem za całe to zagadnienie i nie mam właściwie doświadczenia w tym wszystkim.
proszę zatem osoby, które mogłyby mi pomóc w realizacji tego projektu o kontakt, moje gg na dole :D

pozdrawiam

PS. trudność tkwi też w tym, że trzeba chyba tego OpenGL najpierw zainicjować, aby potem wywoływać plugina z parametrami... niebawem dopiszę conieco o pluginach avisynth.

_________________
Obrazek
GG: 2491715 peaceant(at)wp.pl


poniedziałek, 24 kwietnia 2006, 15:38
Zobacz profil
Aktywny bywalec
Aktywny bywalec
Avatar użytkownika

Dołączył: poniedziałek, 15 września 2003, 12:38
Posty: 541
Post 
Tak sobie jeszcze myślę, że całość renderingu powinna się odbywać w trybie off-screen. Nie jest trudne wbrew pozorom, ale wiąże się czasem z ryzykiem, że nasza sprzętowa akceleracja nie będzie tego obsługiwać ;-)). Jakieś rozwiązanie tej sytuacji to ewentualnie użycie softowego OpenGL takiego jak Mesa na ten przykład.

Fakt, inicjalizacja na pierwszy rzut oka wydaje się być problemem jeżeli Avisynth za każdym razem inicjowałby plugin, ale o ile mnie pamięć nie myli to jest to robione raz dla wszystkich klatek w strumieniu, więc start OpenGL w konstruktorze pluginu, stop w destruktorze a generacja kolejnych klatek byłaby wykonywana przez funkcję działającą na pojedynczej klatce.

Pozdrawiam
Ulv

_________________
"It has secret program of ultimate destruction. All SONYs do." - Largo
"I won't drink your blood because I like you" - Arcueid Brunestud


poniedziałek, 24 kwietnia 2006, 16:20
Zobacz profil
Moderator
Moderator
Avatar użytkownika

Dołączył: czwartek, 22 lipca 2004, 22:55
Posty: 3253
Post 
acha, chodzi mi właśnie o renderowanie offscreen.
imbryk-lusterko powstaje przez mapowanie sześcienne, ale to szczegół, mi chodziło tylko o przekazywanie danych do procedury.
procedura tego imbryczka jest tutaj (jakby ktoś przeoczył)
http://www.dimmension3.spine.pl/modules ... rial&nr=34

pozdrawiam

[ Dodano: Pią Lis 09, 2007 2:12 pm ]
Uwaga! projekt powraca! :twisted: jeśli kogoś ten temat interesuje proszę o kontakt. prawdopodobnie użyty zostanie DX zamiast GL ale idea pozostaje ta sama.

pozdrawiam

_________________
Obrazek
GG: 2491715 peaceant(at)wp.pl


piątek, 9 listopada 2007, 14:13
Zobacz profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Stwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 


Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Powered by phpBB © phpBB Group.
Designed by Vjacheslav Trushkin for Free Forums/DivisionCore.
Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL