Apex Page

From CDOT Wiki
Revision as of 22:52, 12 December 2015 by EunJu Han (talk | contribs) (Work Breakdown and Progress)
Jump to: navigation, search
GAM531 Engine Assignment

Game Engine Apex



Team Members

  1. Erquan Bi
  2. Eunju Han
  3. Ferenc Botos
  4. eMail All


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.

Node Absolute Calculator Result.jpg

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>

Multi-Threading of OOP345

C++ Multithreading Tutorial


Sphere Collision or View Frustum Culling
<Sphere Collision Resources>

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

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 Ashley 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 Ashley Yes 2015-11-13 2015-11-13
Lab 8 Eunju Yes 2015-11-20 2015-11-20
Lab 9 Eunju Yes 2015-11-26 2015-11-27
Lab 10 Ashley 2015-12-04 2015-12-04
OpenGL Lab7 Ashley 2015-12-04 2015-11-13
OpenGL Lab8 Eunju 2015-12-04 2015-11-20
OpenGL Lab9 Eunju 2015-12-04 2015-11-27
OpenGL Lab10 Ashley on final testing 2015-12-04
Submit Engine Enhancement Group YES Friday November 27th, 2015
Submit Project (completed engine) Group On final testing Sunday December 13th, 2015