How I set up low-res/pixel-perfect rendering in libGDX
- Resizes to any screen size (adds black bars depending on aspect ratio)
- Rotation, scaling, etc. are all pixel perfect (see images below)
- First, the game renders all the sprites to an
FrameBuffer
at a set resolution - The
FrameBuffer
is then scaled to the screen size - There are two cameras, one that only looks at the
FrameBuffer
(calledfboCamera
) - The other camera (simply called
camera
), is the one that actually follows the player
![bad](https://private-user-images.githubusercontent.com/77545656/257055665-d92d009f-b3e9-4c02-8689-299ae323d050.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk4OTY1MTksIm5iZiI6MTcxOTg5NjIxOSwicGF0aCI6Ii83NzU0NTY1Ni8yNTcwNTU2NjUtZDkyZDAwOWYtYjNlOS00YzAyLTg2ODktMjk5YWUzMjNkMDUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA0NTY1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUwMGQxZTEwOGM2MGQyMDgwMjhlYTNlM2Q4MzYyYzUwYWEwZjMxYjg4NDY5YmU5ODMwZThiZTk0ZWZmNmM5ZGYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.3ZgvNcdVj6I2TLnHdJPAcHEjGS8opnifBd2yVbZGx24)
![image](https://private-user-images.githubusercontent.com/77545656/257055854-f252de3b-7d37-40d9-a704-958cb3b8732a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk4OTY1MTksIm5iZiI6MTcxOTg5NjIxOSwicGF0aCI6Ii83NzU0NTY1Ni8yNTcwNTU4NTQtZjI1MmRlM2ItN2QzNy00MGQ5LWE3MDQtOTU4Y2IzYjg3MzJhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAyVDA0NTY1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM1OWMxNDg2YmFmMzAwZDNiZDk0NWJkYjViODI4MDEyZDA5NjhlNjZhYjQ1NmZmZTkxMjI4NTkwYTU3NTJlNTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.deYqKmtteWtPEfsz_eeL-EmNNZNiTDRRGubI55mntW8)