Utilizing Readily Available and Open Source Libraries to Create a 3D Game Engine

Utilizing Readily Available and Open Source Libraries to Create a 3D Game Engine

Tim Stowell (Utah State University, USA), Jon Scoresby (Utah State University, USA), Michael R. Capell (Utah State University, USA) and Brett E. Shelton (Utah State University, USA)
DOI: 10.4018/jgcms.2009091502
OnDemand PDF Download:
No Current Special Offers


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.
Article Preview


Market 3D engines have all the capabilities that one would need to build full-featured 3D environments. Those that develop these market 3D engines often invest vast resources of money and people and, therefore, market 3D engines cost a significant amount to license. Educational institutions rarely have the funds to purchase a current top-of-the-line engine, choosing instead to research alternate avenues. These avenues focus mainly on current open source engines or older engines that could be purchased for a lower price (Cruz, Wieland, & Ziegler, 2006). These engines would not support many current development needs, or were too dated to use for cutting-edge applications. Choosing instead to create a 3D engine from scratch allows the flexibility to customize functionality and development structure.

Our group teamed up with the Institute of Emergency Services and Homeland Security (IESHS) to develop software they could use in their training. Generally, our task is to build an incident command training simulation for firefighters. The simulation has been generated as a multiuser first-person perspective training program. Even though the simulation is designed for multiple user participation, the training is meant for the incident commander of that emergency situation. Currently the training will take place in the IESHS computer lab, but future development will allow this training to be expanded to firefighters to participate in the simulation via the Internet. The simulation is partitioned into two primary roles, a facilitator and client user. The facilitator starts and records the simulation whereas the client is meant for the individual firefighters participating in the simulation. The facilitator can also load previously recorded scenarios for learning. Part of the development is to expand this training to EMT, police officers, and other emergency personnel. To encompass all of these areas, we use the moniker Hazard Emergency & Accident Training (HEAT) to describe the needs of our game engine. The HEAT engine aims to be a full-featured, 3D training environment. As such, it requires a number of pieces that many 3D game engines also share including:

  • 3D graphical capabilities

  • VOIP (Voice Over Internet Protocol)

  • Sound and physics

Developing software for any one of the above components alone is a large task. To save time and money, it is often desirable to use “off-the-shelf” software components that already include the needed functionality. However, there are many issues to consider when making the choice to use available libraries because of potential issues that may exist within open code. For the HEAT engine, we used the following process when building necessary functionality of high-end systems, with each point to be described in more detail throughout the article:

  • 1.

    Perform background research into the library functionality

  • 2.

    Make choices based on that research

  • 3.

    Start developing core code (code developed in-house for the main project, not relying on off-the-shelf components)

  • 4.

    Begin an iterative process of integration of core-code with third-party libraries (Shelton, Scoresby, Stowell, Alvarez, Capell, & Coates, in press)

We next discuss the process we used for searching and deciding on what open source libraries to use to develop the 3D engine. Reading the forum discussion boards helped in making decisions—what has worked for others, and which library code to avoid (see Figure 1). It is difficult to contrast our particular open source approach with existing ones. There may be documentation available that discusses how to build 3D game engines, but there are few if any that discuss how to mix and match open source libraries for 3D engine development. Most companies keep their processes a closely guarded trade secret; therefore, we must learn from forums, discussion boards, and through implementing scientific method. We emphasize throughout the article the focus on open source techniques and shared information, which can be generally considered different than the development processes used within large, in-house development teams.

Complete Article List

Search this Journal:
Open Access Articles
Volume 13: 4 Issues (2021): 1 Released, 3 Forthcoming
Volume 12: 4 Issues (2020)
Volume 11: 4 Issues (2019)
Volume 10: 4 Issues (2018)
Volume 9: 4 Issues (2017)
Volume 8: 4 Issues (2016)
Volume 7: 4 Issues (2015)
Volume 6: 4 Issues (2014)
Volume 5: 4 Issues (2013)
Volume 4: 4 Issues (2012)
Volume 3: 4 Issues (2011)
Volume 2: 4 Issues (2010)
Volume 1: 4 Issues (2009)
View Complete Journal Contents Listing