Mam chmurę punktów renderowaną na ekran. Każdy punkt ma swoją pozycję i kolor, a także identyfikator.
Poproszono mnie o renderowanie identyfikatorów dla każdego punktu tekstury, więc utworzyłem FBO i dołączyłem dwie tekstury, jedną dla koloru, a drugą dla głębi. Stworzyłem niezbędne VAO i VBO do tego renderowania poza ekranem i przesłałem dla każdego punktu jego pozycję i identyfikator.
Po zakończeniu renderowania do FBO czytam piksele tekstury kolorów, glReadPixels()
aby zobaczyć, jakie są wartości, ale wydaje się, że wszystkie zostały usunięte, tj. Wartość, którą mają, jest taka sama glClearColor()
.
Czy istnieje sposób, w jaki mogę debugować to, co renderuje na fakturze kolorów mojego FBO? Wszelkie wskazówki, które możesz podać, są bardzo mile widziane.
Przetestowałem kilka aplikacji / interfejsów API / bibliotek, aby uzyskać dane od FBO w aplikacjach, które wykorzystują na przykład gbuffer. Po miesiącach cierpienia odkryłem apitrace dostępny na Github do debugowania OpenGL, Direct3D i WebGL. Używałem w systemie Windows i Linux bez problemów.
Mam nadzieję, że może ci się to przydać.
źródło
Oprócz odpowiedzi cifz, innym sposobem wizualizacji FBO, które nie kosztują dużo kodu, jest użycie glBlitFramebuffer () do przeniesienia pikseli z bufora ramki do okna.
Istnieje kilka oczywistych „gotchas”, ponieważ bufory HDR prawdopodobnie nie będą wizualizować w sposób, w jaki się ich spodziewasz, prawdopodobnie nie możesz „zobaczyć” buforów głębokości / matryc w oczywisty sposób, a jeśli rozmiar FBO nie nie pasują do obszaru, do którego następuje blitting, metoda powiększania / zmniejszania może być bardzo naiwna.
Ale gdy pojawiają się szybkie i brudne hacki, jest całkiem nieźle.
źródło