Git Product home page Git Product logo

computer-graphics-project's People

Contributors

gabbell avatar jrf27 avatar samratdebroy avatar simon-bourque avatar wai-lau avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

computer-graphics-project's Issues

Basic Collision System

Story Points: 10

Priority: HIGH


Sub-Tasks:

  • Brute-force algorithm
  • Algorithm for detecting when AABBs are intersecting. Once an intersection is detected, the entity is pushed out accordingly.
  • Terrain collision.

Completion Criteria:

  • Players cannot clip through blocks.

Skybox Implementation

Story Points: 8

Priority: HIGH


Sub-Tasks:

  • Find the cubemap texture
  • Properly load the cubemap texture (Simon)
  • Create the skybox model.
  • Write a skybox shader.

Completion Criteria:

  • The skybox is facing inside and looks gooood.
  • The skybox size matches the view projection size.

#37

Setting up project solution

  • Set up a basic OpenGL VS solution that is easily buildable on any machine with GLFW and GLEW.

  • Add the stb_image library

Texture hunting

Parent Issue: #10
Or just draw something on paint idk.

  • dirt texture
  • sand texture
  • grass texture
  • snow texture

Project implementation outline

From the teacher's expectations:

"The outline should be a short, two page report describing what and how your team plans to carry out the project. It should also include a tentative time-line of at least three milestones. Note that you may be asked to modify the proposed plan prior to the approval. Only teams whose proposals need modification will be contacted."

GoogleDocs link will be on Slack.

Window & basic input system

Ideal Hours: 5

Priority: HIGH


Sub-Tasks:

  • Implement an InputManager class following the singleton pattern. The class should be accessible globally and should be hooked up to GLFW.

Completion Criteria:

  • We should be able to register a function with the signature void keyCallback(int32 key, int32 action) which gets called anytime a key is pressed/released.
  • More than one callback function should be able to be registered.

View Frustum Culling

Ideal Hours: 10

Priority: HIGH


Sub-Tasks:

  • Implement view frustum culling using octrees so that only blocks that we see are actually rendered.

Completion Criteria:

  • Moar FPS.

Profiling

Ideal Hours: Infinity

Priority: HIGH


Sub-Tasks:

  • Bro, use the brofiler to brofile the engine and make it faster. Bro.

Completion Criteria:

  • Increase performance at any cost.

Water Shading

Story Points: Infinity

Priority: HIGH


Sub-Tasks:

  • Create a sexy water shader.
  • Create a water plane the side of a chunk.
  • Optimize the placement.

Completion Criteria:

  • Natural looking water always appearing below a certain elevation.

Algorithm for procedurally generated terrain & water

Parent Issue: #10

Ideal Hours: 13

Priority: MEDIUM


Sub-Tasks:

  • Use a noise generator to create a Heightmap of blocks for any given Chunk position/size.
  • Pass through created Heightmap to fill vertical spaces (ex: one block is two block spaces higher than an adjacent block, there'll be an empty space below it that the player can see through)
  • Figure out how to add water mesh

Completion Criteria:

  • Chunk's are populated according to terrainBuilder algorithms without any vertical gaps between adjacent blocks
  • Blocks have different Types assigned according to their heights when loaded to the Chunks
  • Blocks should be populated with their absolute world positions

Fix Shadow Swimming

Story Points: Infinity

Priority: HIGH

This occurs due to the light position moving with the player. Apparently, we should move the size by a certain increment based on a texel size.

Link 1
Link 2


Sub-Tasks:

  • Investigate using sampler2DShadow instead of the normal sampler2D. It seems it might be easier although I could not make it work (Gab).
  • Day & night cycle.
  • Shadow mapping

Completion Criteria:

  • Remove shadow swimming and implement a day & night cycle.

Procedural Model Generation

Story Points: N/A

Priority: HIGH


Sub-Tasks:

  • Procedurally generated trees.
  • Natural tree placement.

Completion Criteria:

  • Have a natural looking procedurally generated forest.

Mip Map Blending

Ideal Hours: 8

Priority: MEDIUM


Sub-Tasks:

  • Use the already generated mip map textures to implement a blending algorithm between the different texture resolutions based on their distance from the camera.

Completion Criteria:

  • The textures blend well in between themselves resulting in a lessened Moiré pattern at a distance.

Chunkin' & multi-threading

Ideal Hours: 8

Priority: HIGH


Sub-Tasks:

  • Implement the ChunkManager class. The class should follow the singleton design pattern and be accessible from the update function.
  • Write algorithm to determine which chunks to load or unload based on a given player position. This check should be performed at a high enough frequency so that the world looks seamless.
  • Calculating the block positions should be done asynchronously on separate threads for each chunk being loaded.
  • Send required block data to the gpu for every chunk that has completed. This has to be done on the main thread. Not all chunks need to be sent on the same frame (It can be cascaded).
  • Optimize the chunk rendering as much as possible

Completion Criteria:

  • The ChunkManager class should be able to provide a list of all currently loaded chunks with the associated VAOs to the rendering pipeline.
  • As the player moves, the world should be constantly loading around them.
  • Calculating block positions should not block the main thread.
  • The player should not see any unloaded chunks (they should be far enough away).
  • No deadlocks.

Chunk Unloading

Ideal Hours: 5

Priority: HIGH


Sub-Tasks:

  • Do not render the VAOs of chunks that are out of range.
  • Remove the chunks that are out of range from cmLoadedChunks

Completion Criteria:

  • Chunks that are out of range of the player based on LOADINGRADIUS are unloaded from the graphics card.

Basic entity system

Story Points: 1

Priority: MEDIUM


Sub-Tasks:

  • Create an abstract Entity class. The class will have a virtual update function and a Transform.

Completion Criteria:

  • Just compile I guess.

Billboards

Ideal Hours: 5

Priority: HIGH


Sub-Tasks:

  • Create a billboard class that can be used to render a flat textured object that will always be directed towards the player

Completion Criteria:

  • Have a flexible billboard class that we can use (user-defined position and texture)

Player Controls & Camera

Ideal Hours: 8

Depends on #27

Priority: HIGH


Sub-Tasks:

  • Jumping & gravity (do not use force, use velocity)
  • WASD
  • Mouse Y offset is pitching, Mouse X offset is yawing.

Completion Criteria:

  • Player has to move.

Fog

Ideal Hours: 1

Priority: LOW


Sub-Tasks:

  • Modify the fragment shader so that the fragment color alpha channel is based on player distance.

Completion Criteria:

  • The horizon looks natural based on the loading radius.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.