GAM531 Engine Assignment
Game Engine Apex
Repository
https://bitbucket.org/Apex_Page/
Team Members
Enhancement
Title: Multi-threaded Node Absolute Calculator
Enhancement Result
- The frame flow is very smooth due to the transformation of the node chains which are updated concurrently and efficiently during rendering instead of being done sequentially.
- The program runs significantly faster. To show improved performance of the Emperor Engine, we used Performance and Diagnostic tool in Visual Studio on a lab computer. It shows that by using multiple threads, performance has improved 10 times.
Enhancement Process
- Class ThreadPool
- An object of ThreadPool class is created at its initialization to accept threads in a vector called threads.
- The number of threads depends on the number of the computer core systems, it can be obtained at the run time through std::thread::hardware_concurrency() in ThreadPool constructor.
- The threadPool is a queue holding jobs which are defined as std::function, and a job is added into threadPool in AddJob function.
- std::mutex and std::condition_variable is used to lock and unlock threads status and to wake threads respectively. In addition to, two bool type variables (quit and stopped) are flags to decline a new job while the thread pool is shutting down.
- In Run function, the threadPool dispatches a job to each thread to be finished one by one until all jobs are done or the program is terminated.
- The ShutDown function wakes all threads up and makes them join to be terminated.
- To Use the Threads
- When the NodeManager performs the function updateValues for each active object from the vector activeObjects, jobs(active objects(Node)’ _updateAbs function) are added to the queue threadPool waiting to calculate node’s absolute transformation.
- While adding jobs, one slept thread from the thread pool wakes up, and performs the Run function subsequently.
- Before the function updateValues ends, threads are terminated through the ShutDown function of ThreadPool.
Work Load Division
- Member 1(Erquan (Ashley) Bi)
- Worked on how many threads are needed and how they are being divided and dispatched form the thread pool to a vector of threads for each core to calculate node absolute transformation.
- Member 2 (Eunju Han)
- Managed threads’ running and termination with determined threads and Merged code with Ashley’s work and tested with the client program (Lab8).
Source Code Repository
https://bitbucket.org/Apex_Page/scs_emperor
<Multi-Thread Resources>
Sphere Collision or View Frustum Culling
<Sphere Collision Resources>
SIMPLE SPHERE-SPHERE COLLISION DETECTION AND COLLISION RESPONSE
3D Collision detection (C++) - Miguel Casillas
Pool Hall Lessons: Fast, Accurate Collision Detection Between Circles or Spheres
What is a good algorithm to detect collision between moving spheres?
Work Breakdown and Progress
BitBucket Fetching a remote reference
https://help.github.com/articles/fetching-a-remote/
Lab Workload Plan
- Anybody: lab1(Eunju)
- Ashley: lab2,5,8
- Eunju: lab3,6,9
Frank: lab4,7,10
Lab completed
- Ashley: Lab2, 4, 5, 7, 10
- Eunju: Lab1, 3, 6, 8, 9
Tasks | Assigned | Completed Status | Due date |
---|---|---|---|
Lab 1 | Eunju | Yes 2015-09-25 | 2015-09-25 |
Lab 2 | Ashley | Yes 2015-10-02 | 2015-10-02 |
Lab 3 | Eunju | Yes 2015-10-17 | 2015-10-09 |
Submit Proposal / Research Document | Group | YES | Friday October 16th, 2015 |
Lab 4 | |
Yes 2015-11-03 | 2015-10-16 |
Lab 5 | Ashley | Yes 2015-11-03 | 2015-11-03 |
Lab 6 | Eunju | Yes 2015-11-07(1 min late because of merging issue) | 2015-11-06 |
Lab 7 | |
Yes 2015-11-13 | 2015-11-13 |
Lab 8 | |
Yes 2015-11-20 | 2015-11-20 |
Lab 9 | Eunju | Yes 2015-11-26 | 2015-11-27 |
Lab 10 | |
NO | 2015-12-04 |
OpenGL Lab7 | Ashley | NO | 2015-11-13 |
OpenGL Lab8 | Eunju | NO | 2015-11-20 |
OpenGL Lab9 | Eunju | NO | 2015-11-27 |
OpenGL Lab10 | Ashley | NO | 2015-12-04 |
Submit Engine Enhancement | Group | YES | Friday November 27th, 2015 |
Submit Project (completed engine) | Group | NO | Thursday December 10th, 2015 |