| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- World coordinates is positive x to the left, positive y inwards,
positive z upwards
All math before sending data to OpenGL happens in these world
coordinates. For example, curr_chunk is in world coordinates. chunk
coordinates are also in world system. Only when we get/set data to
OpenGL functions do we perform the 2 step translation
- world y is negated and
- then flipped with world z
so { x, y, z } --> { x, z, -y } basically.
These translations are done for example when in the chunk->model
translation, converting camera coordinates (that are in opengl coords)
to world coords for curr_chunk data, and setting vertex positions in
chunk_load. These have been marked with "//OpenGL FLIP" so it's easy to
find
|
| |
|
|
|
|
| |
- Only render faces that are "visible" so - exposed to air essentially.
- We also check a neighbor chunk to test if there is a block, and
accordigly draw a face in the curr chunk
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Switching to semi-chunk mesh rendering just 100x the framerate, it was
running at around 100fps for 3 CHUNK_DISTANCE, and pushing it above
would make it drop to 30. Now it runs at 9000 frames per second with
CHUNK_DISTANCE of 8, probably can push it even more
- What is bizarre is this is just from the reduction in draw calls,
I still need to implement face culling for invisible blocks (simple)
and frustrum culling (using AABB) or maybe octrees
- Block is way way more simplifed, it's just metadata about a coordinate
in the chunk block array
- All rendering and mesh generation code is handled by chunks. There is
a VAO, single VBO and EBO for each chunk. The data buffer is loaded
into the GPU with a chunk_load, and it stays like that until it is
loaded again. chunk_load is called if we move chunks, in
engine_update. Here we unload existing chunks, then load the new ones
|
| |
|
|
| |
Draw triangles in correct counter clock order, back face wasn't correct
|
| |
|
|
|
|
|
|
|
| |
- Remove the code that sent colors through uniform variables, instead
send texture data
- Each vertex now has a texture coordinate
- struct texture is a easy way to represent textures, can be extended
later
- Shaders updated to use textures
|
| | |
|
| | |
|
| |
|
|
|
| |
If we change a chunk, unload all chunks. This removes block GPU data
(vbo, ebo, vao). We anyways redraw so we don't lose anything
|
| |
|
|
|
|
|
|
|
|
| |
- On world_init, LOAD_CHUNK amount of chunks are preloaded
- Chunks are loaded around the player's current chunk, in a square
shape. The size of the shape is controlled by CHUNK_DISTANCE
- Allow chunks struct to be independent of a position. We load a chunk
TO a position in the world chunk grid (x, y). This allows us to "wrap"
chunks, so we have an endless world, but we are really just wrapping
around
|
| | |
|
| | |
|
| |
|
|
| |
Can use WASD + Mouse to fly around the scene
|
| |
|
|
|
|
|
|
| |
Camera related movements have been moved to camera.c - it tracks the
matrices as well so we don't have to call it in block_update
The player class is empty right now, but the camera will be a child of
the player, and the player a child of the engine
|
| |
|
|
|
| |
- Input is handled in a separate thread, its all kind of unsafe
right now but will fix later on
|
| |
|
|
|
|
|
| |
- More than 1 chunk can now be rendered with the help of the world
struct
- Block coords are now in world space, not local space
- Engine init code cleaned up for cleaner world/chunk handling
|
| |
|
|
|
|
|
| |
- Chunk is a array of blocks
- World is a array of chunks
- Basic chunk plains generation based on simple linear functions
- Bunch of functions still not implemented, in design phase
|
| | |
|
| |
|
|
|
| |
- Rotate block scene at the center
- Add block_debug to print block data
|
| | |
|
| |
|
|
|
| |
- VAO/VBO binding bug fixed, added explaination in comments
- Add 9 rotating blocks
|
| | |
|
| | |
|
| | |
|
| |
|