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.
Odpowiedzi:
„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.
źródło
Podczas pracy w 2D z OpenGL często używam lewego górnego rogu jako źródła. Można to zrobić za pomocą:
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:
gdzie należy
x, y
okreś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
glDrawPixels
użycieglRasterPos
do pozycjonowania iglRasterPos
uż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.
źródło