Apex Page
GAM531 Engine Assignment
Game Engine Apex
Repository
https://bitbucket.org/Apex_Page/
Team Members
Enhancement
Title: Multi-threaded Node Absolute Calculator
Enhancement Result
- The frames flow much smoothly due to the transformation of the node chains is updated concurrently and efficiently during rendering instead of being done sequentially.
- The program runs faster significantly. To show improved performance of Emperor Engine, we used Performance and Diagnostic tool in Visual Studio on the lab computer. It shows that using thread is 10 times faster than before.
Enhancement Process
- Class ThreadPool
- A class ThreadPool is created which creates threads at its initialization.
- The number of threads depends on the number of the computer core system, it can be obtained at the run time through std::thread::hardware_concurrency() in ThreadPool constructor, and it is stored in a std::vector called threads.
- The threadPool is a queue holding jobs which is 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 flag determining to run threads.
- In Run function, the threadPool dispatches the 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 add to the queue threadPool which means an added job is waiting to calculate node’s absolute transformation.
- While adding jobs, one thread from thread pool wakes up, and perform 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)
- Work on how many threads need to calculate node absolute transformation on hardware.
- Member 2 (Eunju Han)
- Manager thread running and termination with determined threads.
<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 |