DRIVER3x2 Opublikowano 1 Października 2009 Udostępnij Opublikowano 1 Października 2009 Witam serdecznie, Od jakiegoś czasu czę się OpenGL i przy okazji pomagam koledze przy tworzeniu gry w Game Makerze, chciałbym w tym wykorzystać wiedzę którą posiadam o OpenGL. Najchętniej bym to zrobił korzystając z bibliotek .dll (pisząc bibliotekę w c++ kompilować do .dll i używać funkcji z tej biblioteki z użyciem Game Makera) Ale niestety nie wiem jak się za to zabrać, potrafię tworzyć biblioteki .dll dla Game Maker bo już kilka zrobiłem, lecz nie używałem nigdy do tego OpenGL. Uprzejmie proszę Was żebyście mi pokazali jakiś malutki przykład np. wyświetlenie jakiegoś kwadratu 2D. Kod źródłowy biblioteki .dll i w którym miejscu użyć funkcji z biblioteki w Game Makerze. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 1 Października 2009 Udostępnij Opublikowano 1 Października 2009 O ile mi wiadomo, jak i w DXie jest potrzebny uchwyt do okna. Można go uzyskać po przez window_handle(); ( w GM ) Z resztą powinieneś już sobie poradzić ;) Btw. Musisz jeszcze dezaktywować rysowanie po przez GMa Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
DRIVER3x2 Opublikowano 2 Października 2009 Autor Udostępnij Opublikowano 2 Października 2009 Dziękuje Konrad za odpowiedź lecz jak dla mnie jest ona zbyt ogólna. Szczeże mówiąc spodziewałem się że szybko ktoś mi pomożę bo na forum wiem że kilka osób korzysta z takich rozwiązań. Może żeby było prościej pokaże wam jak ja to robię i proszę o wskazanie błędów: Przykładowy kod źródłowy .dll (tworzenie kwadratu): #include "dll.h" #include <windows.h> #include <gl\gl.h> #include <gl\glu.h> #include <gl\glaux.h> #define export extern "C" __declspec(dllexport) export char *Fquads(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5f,0.0f,-6.0f); glBegin(GL_QUADS); glVertex3f(-1.0f, 1.0f, 0.0f); // górny lewy glVertex3f( 1.0f, 1.0f, 0.0f); // górny prawy glVertex3f( 1.0f,-1.0f, 0.0f); // dolny prawy glVertex3f(-1.0f,-1.0f, 0.0f); // dolny lewy glEnd(); } Kod wywołania w Game Maker w "ciele" obiektu: GML Fquads = external_define( 'Projekt1.dll', 'Fquads', dll_stdcall, ty_string, 0); external_call(Fquads); external_free('Projekt1.dll') Proszę o szybką analize :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 2 Października 2009 Udostępnij Opublikowano 2 Października 2009 1. Tworzysz kontekst OpenGL dla okna GM (pobierając jego uchwyt funkcją: window_handle()), odpowiedni pixel format oraz render target po którym będzie rysować. Dodatkowo wywołujesz: set_automatic_draw(false) 2. ładujesz rozszerzenia (bo na nich bazują zaawansowane opcje OpenGL), o ile z nich korzystasz. 3. Rysujesz co chcesz i zamieniasz bufory (SwapBuffer) 4. Zwalniasz render target oraz kontekst OpenGL Poza tym broń boże przed tym typem char* który tam dałeś, liczby zwracaj jako double, tekst jako char*, a gdy nic nie zwracasz to i tak dla bezpieczeństwa daj double. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
DRIVER3x2 Opublikowano 2 Października 2009 Autor Udostępnij Opublikowano 2 Października 2009 PsichiX a miał byś chwilkę żeby podać mi prosty przykład chociażby te rysowanie kwadratu, zajmie ci to chwileczkę a ja będę bardzo wdzięczny, bo niby rozumiem to co napisałeś, ale nie wiem co i gdzie. Proszę :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi