I’ve been working on and off on this project for the last couple of years. I wanted to make a world entirely out of billboard sprites. These are some recordings I made during the beginning of development in 2015:
09h0BxeWngw
This was all rendered on a Swing JPanel, which was pretty inefficient. I’ve since switched to OpenGL, but at the time I didn’t know any better.
Here are executable jar files of some versions if you’re interested:
- First version: https://www.dropbox.com/s/uh8j3z1n4p0c8n4/Demo.jar?dl=1
- Improved version: https://www.dropbox.com/s/0msinzk8tiqil0f/demo2.jar?dl=1
- Space version: https://www.dropbox.com/s/xg6uiw65uhg7fz3/SpaceDemo.jar?dl=1
A couple of months later I was figuring out how to render a floor/ceiling grid and made some recordings. I’ve ended up not using it in the end since I moved on to full 3D movement later on.
Sr6wNhH5n3k
Almost a year later I decided to pick up this project again. I had a course on computer graphics and gained some knowledge of OpenGL, but I didn’t know how to use it in Java up until this point. Then I discovered LWJGL and I was able to relatively easily migrate from a Swing Canvas to legacy OpenGL. The performance was still pretty terrible, so I started from scratch in modern OpenGL and it got pretty weird.
RdkVq9jJl7c
Then I needed a faster way to choose which objects to render than checking them individually, so I implemented an octree data structure to render groups of nearby objects. A node is subdivided after a maximum amount of objects are added and it redistributes its objects to its 8 child nodes. It also allows for a fast way to raycast through all objects, which I used to detect collision with the player.
ESeBlH5mxlg
A few months ago I really got back into it and improved terrain generation using perlin noise and implemented some rendering optimizations.
KfrrW6qdRGQ
And that’s where I’m at right now ;D
Try the latest version here: https://www.dropbox.com/s/4dps5zsd93tx3x0/Remo%20Engine%203.1.jar?dl=1
Controls:
- F to switch between orbit/first person camera.
- In orbit mode: Middle mouse button to rotate, shift + middle mouse button to move around, scroll to zoom and click to focus on an object.
- In first person mode: WASD to move, g to disable gravity, choose a sprite with number keys, left click to place, right click to remove, scroll to move cursor
- F3 for viewing octree nodes, v to toggle vsync, b to toggle normal/additive blending