{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,10]],"date-time":"2026-06-10T15:09:12Z","timestamp":1781104152844,"version":"3.54.1"},"reference-count":69,"publisher":"IGI Global Scientific Publishing","issue":"4","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2009,10,1]]},"abstract":"<p>Market 3D engines have all the capabilities needed for developing full-featured 3D simulation and game environments. However, for those in education and small business, it remains a formidable task to acquire the resources needed to purchase or create a development platform with cutting-edge capabilities. Leveraging existing and open-source software libraries can greatly enhance the main application development, freeing developers to focus more on the application concept itself rather than the needed supporting pieces. This article explores the nuances of successfully mixing core code with these third-party libraries in creating a fully functioning development environment. Many steps with accompanying checks-and-balances are involved in creating a game engine, including making choices of which libraries to use, and integrating the core code with third-party libraries. By offering insights into our open source driven process, we help inform the understanding of how game engines may be generated for other educational and small-budget projects.<\/p>","DOI":"10.4018\/jgcms.2009091502","type":"journal-article","created":{"date-parts":[[2010,4,30]],"date-time":"2010-04-30T10:20:23Z","timestamp":1272622823000},"page":"20-49","source":"Crossref","is-referenced-by-count":3,"title":["Utilizing Readily Available and Open Source Libraries to Create a 3D Game Engine"],"prefix":"10.4018","volume":"1","author":[{"given":"Tim","family":"Stowell","sequence":"first","affiliation":[{"name":"Utah State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Jon","family":"Scoresby","sequence":"additional","affiliation":[{"name":"Utah State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Michael R.","family":"Capell","sequence":"additional","affiliation":[{"name":"Utah State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Brett E.","family":"Shelton","sequence":"additional","affiliation":[{"name":"Utah State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"2432","reference":[{"key":"jgcms.2009091502-0","unstructured":"Abrash, M. (2000). Inside quake: Visible-surface determination. GameDev.net. Retrieved February 10, 2008, from http:\/\/www.gamedev.net\/reference\/articles\/article981.asp"},{"key":"jgcms.2009091502-1","unstructured":"Ageia Phys, X. SDK documentation. (2007a). Collision detection, meshes, cooking. [Electronic version]. Mountain View, CA: Ageia."},{"key":"jgcms.2009091502-2","unstructured":"Ageia Phys, X. SDK documentation. (2007b). Lesson 305\u2013raycast report. Mountain View, CA: Ageia."},{"key":"jgcms.2009091502-3","unstructured":"Ajs15822. (2007, May 24). Navi [Msg 1]. Message posted to http:\/\/www.ogre3d.org\/forums\/viewtopic.php?t=32384"},{"key":"jgcms.2009091502-4","unstructured":"Alexandrov, O. (2007). Surface normal. Retrieved March 4, 2008, from http:\/\/en.wikipedia.org\/wiki\/Surface_normal"},{"key":"jgcms.2009091502-5","unstructured":"Autodesk Software. (2006). Autodesk Maya. Retrieved January 20, 2009, from http:\/\/usa.autodesk.com\/adsk\/servlet\/index?id=7635018&siteID=123112"},{"key":"jgcms.2009091502-6","unstructured":"Bencina, R. (2008). Portable cross-platform Audio API. Retrieved January 20, 2009, from http:\/\/www.portaudio.com"},{"key":"jgcms.2009091502-7","unstructured":"Berkley Software. (2008). BSD license definition. Retrieved January 20, 2009, from. http:\/\/www.linfo.org\/bsdlicense.html"},{"key":"jgcms.2009091502-8","unstructured":"BetaJaen. (2006, November 7). BetaGUI: BetaGUI 2.5 update-style system added [Msg 1]. Message posted to http:\/\/www.ogre3d.org\/forums\/viewtopic.php?f=11&t=25853&start=275"},{"key":"jgcms.2009091502-9","unstructured":"Bilas, S. (2007). A data-driven game object system [Electronic version]. Retrieved from http:\/\/www.drizzle.com\/~scottb\/gdc\/game-objects.ppt"},{"key":"jgcms.2009091502-10","unstructured":"Bisco. (2008). Tools. Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/index.php?option=com_content&task=view&id=413&Itemid=133"},{"key":"jgcms.2009091502-11","unstructured":"Blender. (2009). Blender. Retrieved January 15, 2009, from http:\/\/www.blender.org"},{"key":"jgcms.2009091502-12","unstructured":"Carnegie Mellon Entertainment Technology Center. (2006). Welcome to Panda3D! Retrieved January 20, 2009, from http:\/\/panda3d.org"},{"key":"jgcms.2009091502-13","doi-asserted-by":"publisher","DOI":"10.1002\/vis.4340050104"},{"key":"jgcms.2009091502-14","unstructured":"Creative Labs. (2008). OpenAL. Retrieved January 20, 2009, from http:\/\/connect.creativelabs.com\/openal\/default.aspx"},{"key":"jgcms.2009091502-15","unstructured":"Creative Technology. (2008). Sound Blaster. Retrieved January 20, 2009, from http:\/\/www.soundblaster.com"},{"key":"jgcms.2009091502-16","doi-asserted-by":"publisher","DOI":"10.1002\/spip.257"},{"key":"jgcms.2009091502-17","unstructured":"Deitel, H., & Deitel, P. (2001). C++ how to program (3rd ed.). Upper Saddle River, NJ: Prentice Hall."},{"key":"jgcms.2009091502-18","unstructured":"Epic Software. (2008). Unreal technology. Retrieved January 20, 2009, from http:\/\/www.unrealtechnology.com"},{"key":"jgcms.2009091502-19","unstructured":"Fernando, R. (Ed.). (2004). GPU gems: Programming techniques, tips, and tricks for real-time graphics. Toronto, Ontario, Canada: Addison-Wesley Professional"},{"key":"jgcms.2009091502-20","unstructured":"Fiedler, G. (2007). Clients approximate server physics locally. Retrieved January 20, 2009, from http:\/\/www.gaffer.org\/game-physics\/networked-physics"},{"key":"jgcms.2009091502-21","unstructured":"Firelight Technologies. (2008). FMOD music and sound effects system. Retrieved January 20, 2009, from http:\/\/www.fmod.org"},{"key":"jgcms.2009091502-22","unstructured":"GNU Project GPL. (2008a). GNU general public license. Retrieved January 20, 2009, from http:\/\/www.gnu.org\/copyleft\/gpl.html"},{"key":"jgcms.2009091502-23","unstructured":"GNU Project LGPL. (2008b). GNU lesser general public license. Retrieved January 20, 2009, from http:\/\/www.gnu.org\/licenses\/lgpl.html"},{"key":"jgcms.2009091502-24","unstructured":"Google. (2008). Google summer of code. Retrieved January 20, 2009, from http:\/\/code.google.com\/soc\/2008"},{"key":"jgcms.2009091502-25","unstructured":"Harris, M. (2004). Fast fluid dynamics simulation on the GPU. Programming techniques, tips, and tricks for real-time graphics (pp. 637-655). Toronto, Ontario, Canada: Addison-Wesley Professional."},{"key":"jgcms.2009091502-26","unstructured":"Jenkins, K. (2008). Jenkins software. Retrieved January 20, 2009, from http:\/\/www.jenkinssoftware.com"},{"key":"jgcms.2009091502-27","unstructured":"Jensen, S. (2008). JamPlus. Retrieved January 20, 2009, from http:\/\/redmine.jamplex.org\/projects\/show\/jamplus"},{"key":"jgcms.2009091502-28","unstructured":"Junker, G. (2007, January 31). Movable object listener [Msg 10]. Message posted to http:\/\/www.ogre3d.org\/phpBB2\/viewtopic.php?=&p=200435"},{"key":"jgcms.2009091502-29","unstructured":"Khronos Group. (2008). Collada\u20143D asset exchange schema. Retrieved January 20, 2009, from http:\/\/www.khronos.org\/collada"},{"key":"jgcms.2009091502-30","doi-asserted-by":"crossref","unstructured":"Kipfer, P., Segal, M., & Westermann, R. (2004, August 29-30). Uberflow: A GPU-based particle engine. In Proceedings of the SIGGRAPH\/Eurographics Workshop on Graphics Hardware at the ACM SIGGRAPH\/Eurographics conference, Grenoble, France (pp. 115-122). ACM Publishers.","DOI":"10.1145\/1058129.1058146"},{"key":"jgcms.2009091502-31","unstructured":"Kuarnes, T. (2008). OgreBullet forum index. Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/addonforums\/viewforum.php?f=12&start=0"},{"key":"jgcms.2009091502-32","unstructured":"KungFooMasta. (2008). QuickGUI forum index. Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/addonforums\/viewforum.php?f=13"},{"key":"jgcms.2009091502-33","unstructured":"Lombard, Y. (2002a, November 11). Combining Octrees and BSP trees... is it possible? [Msg 7]. Message posted to http:\/\/www.gamedev.net\/community\/forums\/topic.asp?topic_id=123169"},{"key":"jgcms.2009091502-34","unstructured":"Lombard, Y. (2002b, November 14). Combining Octrees and BSP trees... is it possible? [Msg 14]. Message posted to http:\/\/www.gamedev.net\/community\/forums\/topic.asp?topic_id=123169"},{"key":"jgcms.2009091502-35","unstructured":"LucasArts Entertainment Company. (2002). Jedi knight II: Jedi outcast [CD-ROM]."},{"key":"jgcms.2009091502-36","unstructured":"McGrath, S. (2004). Developer\u2019s blog: September 8th, 2004\u2014post processing framework, HDR ppeline. Project Offset. Retrieved September 2007, from http:\/\/www.projectoffset.com\/blog.php?id=15"},{"key":"jgcms.2009091502-37","unstructured":"McShaffrey, M. (2003). Game coding complete (2nd ed.). Scottsdale, AZ: Paraglyph Press Inc."},{"key":"jgcms.2009091502-38","unstructured":"Microsoft Developer Network. (2009). DDS. Retrieved January 20, 2009, from http:\/\/msdn.microsoft.com\/en-us\/library\/bb943990(VS.85).aspx"},{"key":"jgcms.2009091502-39","doi-asserted-by":"publisher","DOI":"10.1002\/spe.680"},{"key":"jgcms.2009091502-40","unstructured":"Mohamed, M. (2006, April). Stop your physics simulation. Retrieved November 3, 2007, from http:\/\/reality.artificialstudios.com\/twiki\/bin\/view\/Main\/RigidActors"},{"key":"jgcms.2009091502-41","doi-asserted-by":"crossref","unstructured":"Mozilla Foundation. (2008). Mozilla code licensing. Retrieved January 20, 2009, from http:\/\/www.mozilla.org\/MPL","DOI":"10.1016\/S1353-4858(08)70068-0"},{"key":"jgcms.2009091502-42","unstructured":"Newton. (2008). Newton game dynamics. Retrieved January 20, 2009, from http:\/\/www.newtondynamics.com\/index.html"},{"key":"jgcms.2009091502-43","unstructured":"Nguyen, H. (2004). Fire in the \u201cVulcan\u201d demo. Programming techniques, tips, and tricks for real-time graphics (pp. 87-105). Toronto, Ontario, Canada: Addison Wesley Professional."},{"key":"jgcms.2009091502-44","unstructured":"Nvidia. (2009). NVIDIA PhysX. Retrieved January 20, 2009, from http:\/\/www.nvidia.com\/object\/nvidia_physx.html"},{"key":"jgcms.2009091502-45","unstructured":"Ogre3D API. (2008a). Ogre:StringInterface class reference. Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/docs\/api\/html\/classOgre_1_1StringInterface.html"},{"key":"jgcms.2009091502-46","unstructured":"Ogre3D API. (2008b). Ogre:Entity class reference. Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/docs\/api\/html\/classOgre_1_1Entity.html"},{"key":"jgcms.2009091502-47","unstructured":"OSG. (2008). Welcome to the OpenSceneGraph website. Retrieved January 20, 2009, from http:\/\/www.openscenegraph.org\/projects\/osg"},{"key":"jgcms.2009091502-48","unstructured":"Petkovsek, C. (2007). Quaternion and rotation primer. Retrieved January 15, 2007, from http:\/\/www.ogre3d.org\/wiki\/index.php\/Quaternion_and_Rotation_Primer"},{"key":"jgcms.2009091502-49","unstructured":"Quake Engine. (2007). id Software [Electronic version]. http:\/\/www.idsoftware.com\/games-\/quake\/quake3-teamarena"},{"key":"jgcms.2009091502-50","unstructured":"Ramey, R. (2004). Serialization overview. Retrieved January 20, 2009, from http:\/\/www.boost.org\/doc\/libs\/1_37_0\/libs\/serialization\/doc\/index.html"},{"key":"jgcms.2009091502-51","unstructured":"ReedBeta. (2008). Kd-trees. Retrieved January 20, 2009, from. http:\/\/en.wikipedia.org\/wiki\/Kd-tree"},{"key":"jgcms.2009091502-52","doi-asserted-by":"publisher","DOI":"10.1145\/357318.357320"},{"key":"jgcms.2009091502-53","unstructured":"Roberts, N. (2007). Naughty\u2019s MEL scripts. Modeling scripts. Retrieved September 1, 2007, from http:\/\/www.naughtynathan.supanet.com\/data\/mel.htm"},{"key":"jgcms.2009091502-54","unstructured":"Salzman, L. (2008). Enet. Retrieved January 20, 2009, from. http:\/\/enet.bespin.org"},{"key":"jgcms.2009091502-55","article-title":"A Frankenstein approach to open-source: The construction of a 3D game engine as meaningful educational process.","author":"B. E.Shelton","journal-title":"IEEE Transactions on Learning Technologies"},{"key":"jgcms.2009091502-56","unstructured":"Silicon Graphics. (2008). Open inventor. Retrieved January 20, 2009, from http:\/\/oss.sgi.com\/projects\/inventor"},{"key":"jgcms.2009091502-57","unstructured":"Smart, J. (2008). What is wxWidgets? Retrieved January 20, 2009, from http:\/\/www.wxwidgets.org"},{"key":"jgcms.2009091502-58","unstructured":"SpaceDude. (2007, March 31). Ragdolls [Msg 4]. Message posted to http:\/\/www.ogre3d.org\/phpBB2addons\/viewtopic.php?t=3949&highlight=ragdoll"},{"key":"jgcms.2009091502-59","unstructured":"Stowell, T. (2006, November 6). [solved] custom projection matrix changes RaySceneQuery? [Msg 4]. Message posted to http:\/\/www.ogre3d.org\/forums\/viewtopic.php?f=2&t=25673"},{"key":"jgcms.2009091502-60","unstructured":"Streeting, S. (2007). DevMaster.net. 3D engines database, Ogre 3D. Retrieved August 1, 2006, from http:\/\/www.devmaster.net\/engines\/engine_details.php?id=2]."},{"key":"jgcms.2009091502-61","unstructured":"Streeting, S. (2009). What is Ogre? Retrieved January 20, 2009, from http:\/\/www.ogre3d.org\/index.php?option=com_content&task=view&id=19&Itemid=105"},{"key":"jgcms.2009091502-62","unstructured":"Suter, J. (1999). Introduction to Octrees. Retrieved January 20, 2009, from http:\/\/www.flipcode.com\/archives\/Introduction_To_Octrees.shtml"},{"key":"jgcms.2009091502-63","unstructured":"Turner, P. (2008). Welcome to Crazy Eddie\u2019s GUI system. Retrieved January 20, 2009, from http:\/\/www.cegui.org.uk\/wiki\/index.php\/Main_Page"},{"key":"jgcms.2009091502-64","unstructured":"Valve Software. (2008). Source multiplayer networking. Retrieved January 20, 2009, from http:\/\/developer.valvesoftware.com\/wiki\/Source_Multiplayer_Networking"},{"key":"jgcms.2009091502-65","unstructured":"Villagrana, J. (2007). Downloads. ABT. Retrieved April 10, 2007, from http:\/\/www.3dgloom.net\/html\/downloads.html"},{"key":"jgcms.2009091502-66","unstructured":"Volca. (2007). CVS code repository. Retrieved April 3, 2007, from http:\/\/opde.cvs.sourceforge.net\/opde\/opde\/src"},{"key":"jgcms.2009091502-67","unstructured":"Wade, B. (1998). BSP tree frequently asked questions (FAQ). Retrieved January 20, 2009, from http:\/\/www.gamedev.net\/reference\/articles\/article657.asp"},{"key":"jgcms.2009091502-68","unstructured":"Wilson, K. (2007). Game object structure: Inheritance vs. aggregation. Retrieved July 18, 2007, from http:\/\/gamearchitect.net\/Articles\/GameObjects1.html wxWidgets. (2007). wxWidgets. Retrieved August 1, 2006, from http:\/\/www.wxWidgets.org"}],"container-title":["International Journal of Gaming and Computer-Mediated Simulations"],"original-title":[],"language":"ng","link":[{"URL":"https:\/\/www.igi-global.com\/viewtitle.aspx?TitleId=37537","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2022,6,1]],"date-time":"2022-06-01T15:16:22Z","timestamp":1654096582000},"score":1,"resource":{"primary":{"URL":"https:\/\/services.igi-global.com\/resolvedoi\/resolve.aspx?doi=10.4018\/jgcms.2009091502"}},"subtitle":[""],"short-title":[],"issued":{"date-parts":[[2009,10,1]]},"references-count":69,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2009,10]]}},"URL":"https:\/\/doi.org\/10.4018\/jgcms.2009091502","relation":{},"ISSN":["1942-3888","1942-3896"],"issn-type":[{"value":"1942-3888","type":"print"},{"value":"1942-3896","type":"electronic"}],"subject":[],"published":{"date-parts":[[2009,10,1]]}}}