O co powinienem się martwić, zmieniając źródło OpenGL na lewy górny róg ekranu?


11

Do samokształcenia piszę silnik platformowy 2D w C ++ za pomocą SDL / OpenGL. Początkowo zacząłem od czystego SDL, korzystając z samouczków na sdltutorials.com i lazyfoo.net, ale teraz używam SDL do tworzenia kontekstu renderowania OpenGL, a następnie renderowania za pomocą funkcji OpenGL (konkretnie trybu natychmiastowego, ale uczę się o VAO / VBO) ). Używam SDL tylko do interfejsu, audio itp.

SDL używa układu współrzędnych z punktem początkowym w lewym górnym rogu ekranu i dodatnią osią y skierowaną w dół. Łatwo jest skonfigurować moją projekcję ortograficzną w OpenGL, aby to odzwierciedlić.

Wiem, że współrzędne tekstury są układem po prawej stronie o wartościach od 0 do 1 - odwracanie tekstury w pionie przed renderowaniem (no, odwróć plik przed załadowaniem) daje tekstury, które renderują się poprawnie ... co jest dobre, jeśli rysuję całą teksturę, ale ostatecznie będę używać zestawów kafelków i potrafię sobie wyobrazić problemy.

Co powinienem martwić, jeśli chodzi o rendering, kiedy to robię?

Jeśli ktoś ma jakąś radę lub zrobił to sam i potrafi wskazać przyszłe pułapki, byłoby świetnie, ale tak naprawdę wszelkie uwagi byłyby mile widziane.


1
Czy używasz SDL do renderowania (jak w funkcjach blittingowych SDL), czy używasz SDL do tworzenia kontekstu renderowania OpenGL, a następnie używasz funkcji OpenGL do renderowania?
Nicol Bolas,

1
Używam SDL do tworzenia kontekstu renderowania OpenGL i używam funkcji OpenGL do renderowania. Wyjaśnię to w pytaniu.
pochodna

1
Być może, jeśli zamierzasz użyć układu fizyki, lepiej sprawdź, z którego układu współrzędnych korzysta (praworęczny lub leworęczny, Y-UP lub Y-DOWN) i nadal używaj tego samego. Oczywiście możesz robić takie rzeczy jak odwracanie grawitacji, ale spróbowałbym użyć tego samego, aby ułatwić thngs.
Gustavo Maciel

Odpowiedzi:


8

„O co powinienem się martwić, jeśli chodzi o rendering, kiedy to robię?” - niewiele. System współrzędnych jest tylko konwencją, a nie twardą i szybką zasadą, i jest to całkowicie legalna i ważna rzecz do zrobienia. Tylko upewnij się, że jesteś konsekwentny w swoim własnym użyciu i wszystko będzie działać dobrze.


Świetny! Miałem przeczucie, że spójność była jedyną rzeczą, o którą musiałem się martwić, ale to dla mnie nowe terytorium.
pochodna

1
Powinienem dodać, że drogi stary Quake zrobił to w 1996 roku i działało dobrze.
Maximus Minimus,

5

Podczas pracy w 2D z OpenGL często używam lewego górnego rogu jako źródła. Można to zrobić za pomocą:

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

Istnieją jednak pewne pułapki przy zmianie źródła w lewym górnym rogu.

Jedna pułapka, na którą natknąłem się więcej niż raz: glScissor()która jest używana do obcinania, zawsze używa współrzędnych lewej dolnej.

Jego podpis to:

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

gdzie należy x, yokreślić lewy dolny róg skrzynki nożycowej.

Mówiąc bardziej ogólnie, wszystkie funkcje działające we współrzędnych okna używają lewego dolnego rogu jako źródła. Obejmuje to funkcje takie jak gluProject, gluUnProject, glCopyPixels, itd.

Ale niektóre funkcje, takie jak glDrawPixelsużycie glRasterPosdo pozycjonowania i glRasterPosużycie współrzędnych obiektowych (tj. Przekształconych) .

Jeśli korzystasz z systemu Linux i wiesz, jak z niego korzystać man, możesz pobrać kopię stron podręcznika OpenGL tutaj: ftp://ftp.sgi.com/sgi/opengl/doc/ Znajduję je w czasie rzeczywistym wygaszacz.

Zauważam też, że mówisz tekstury „przerzuć plik przed załadowaniem”. To nie jest konieczne. Zamiast przerzucać obraz podczas ładowania, po prostu odwróć współrzędne tekstury, aby podczas renderowania zmieniało się z 1,0 na 0,0.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.