108
edits
Changes
→Work Breakdown and Progress
# [mailto:ebi@myseneca.ca?subject=GAM531 Erquan Bi]
# [mailto:ejhan4@myseneca.ca?subject=GAM531 Eunju Han]
# [mailto:flbotos4@myseneca.ca?subject=GAM531 <s>Ferenc Botos</s>]
# [mailto:ebi@myseneca.ca;ejhan4@myseneca.ca;flbotos4@myseneca.ca?subject=GAM531 eMail All]
== assignment enhancement option Enhancement ==<br/>'''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. [[File:Node Absolute Calculator Result.jpg]] <br/>'''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''. '''Enhancement Description'''<br/>Multi-threading technology is used for calculating node absolute transformation in Emperor Engine which gives a performance enhancement. Every time the engine renders a scene with the nodes (which happens in NodeManager) it works through an iteration using a loop to update the absolute matrix sequentially. By using multiple threads, it works much faster and makes engine work in a more efficient way.<br/><br/> '''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'''<br/>[https://bitbucket.org/Apex_Page/scs_emperor https://bitbucket.org/Apex_Page/scs_emperor] <br/> '''References'''* Multi-Thread Resources [https://scs.senecac.on.ca/~oop345/pages/content/multi.html Multi-Threading of OOP345] [https://solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial/ C++ Multithreading Tutorial] [http://www.cplusplus.com/reference/thread/thread/ std::thread] <br/>* BitBucket Fetching a remote reference<br/>https://help.github.com/articles/fetching-a-remote/<br/><br/><br/><s>Sphere Collision or View Frustum Culling</s><br/><s><Sphere Collision Resources> <br/>[https://studiofreya.com/3d-math-and-physics/simple-sphere-sphere-collision-detection-and-collision-response/ SIMPLE SPHERE-SPHERE COLLISION DETECTION AND COLLISION RESPONSE] [http://www.miguelcasillas.com/?mcportfolio=collision-detection-c 3D Collision detection (C++) - Miguel Casillas] [http://www.gamasutra.com/view/feature/131424/pool_hall_lessons_fast_accurate_.php Pool Hall Lessons: Fast, Accurate Collision Detection Between Circles or Spheres] [http://gamedev.stackexchange.com/questions/313/what-is-a-good-algorithm-lab workloadto-detect-collision-between-moving-spheres What is a good algorithm to detect collision between moving spheres?]</s> == Work Breakdown and Progress ==<br/>'''Project completed'''<br/>Our team Apex, has finished Emperor_Engine Version 1.0. We completed testing it with Directx11 in release mode. There are also all four OpenGL lab codes filled in, and we have tried to re-implement all part OpenGL we need. However, due to the lack of time and some reasons related to materials and textures, this game engine with OpenGL does not work properly. [[File:apex_version1.png]] <br/>'''Engine enhancement completed'''<br/>Our team Apex has submit Engine Enhancement assignment with the tag "EngineEnhancement" on the group repository on Nov 27th, 2015.<br/>Please look at the section above in details. '''Lab completed'''*Ashley: Lab2, 4, 5, 7, 10, OpenGL lab8 and 9<br/>*Eunju: Lab1, 3, 6, 8, 9, OpenGL lab7 and 10<br/><br/>'''Lab Workload Plan'''*Anybody: lab1(Eunju)<br/>Ashely*Ashley: lab2,5,8<br/>*Eunju: lab3,6,9<br/>*<s>Frank: lab4,7,10</s><br/><br/> {| class="wikitable sortable" border="1" cellpadding="5"|+ ! 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(late because of team member set back) || 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 || Yes 2015-12-04 ||2015-12-04|-| OpenGL Lab7 || Eunju || Yes Code 2015-12-13 ||2015-11-13|-| OpenGL Lab8 || Ashley || Yes Code 2015-12-13 ||2015-11-20|-| OpenGL Lab9 || Ashley || Yes Code 2015-12-13 ||2015-11-27|-| OpenGL Lab10 || Eunju|| Yes Code 2015-12-13 ||2015-12-04|-| Submit Engine Enhancement|| Group|| YES ||Friday December 4th, 2015|-| Submit Project (completed engine) || Group || YES ||Sunday December 13th, 2015|-