A basic cross-platform (Mac, Windows, Linux, HTML5, Android) 3D game engine making use of:
- SDL1/SDL2 window library.
- stb_image.h image library.
- OpenGL 3 / OpenGL ES 2.0 / OpenGL ES 3.0 Graphics APIs.
- Assimp asset importing library.
- GLEW extension loading library.
First install required libraries:
brew install sdl2 assimp glew glm cmake
# Then install freetype gl
cd ../
brew install Doxygen AntTweakBar
git clone git@github.com:rougier/freetype-gl.git
cd freetype-gl
cmake .
make
ln -s THIS_FOLDER /usr/local/include/
mv libfreetype-gl.a /usr/local/lib/
After create the make file or project with cmake:
./cmake-make.sh
Then if in Mac or Linux:
cd bin
make
To build the html5 engine use:
./cmake-emscripten.sh
# also need to compile assimp with emscripten:
git clone git@github.com:assimp/assimp.git
cd assimp
mkdir build.em
cd build.em
cmake -DEMSCRIPTEN=1 -DCMAKE_TOOLCHAIN_FILE=~/emsdk_portable/emscripten/1.21.0/cmake/Platform/Emscripten.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_MODULE_PATH=~/emsdk_portable/emscripten/1.21.0/cmake ..
make
# then build with:
cd bin-emscripten
make
python -m SimpleHTTPServer
open http://localhost:8000/game.html
To build for android do the following:
First download the android ndk and sdk (https://developer.android.com/tools/sdk/ndk/) and (https://developer.android.com/sdk/index.html) Then download the android ndk cmake toolchain (android.toolchain.cmake) from (https://code.google.com/p/android-cmake/)
export NDK_PATH=/path/to/your/android/ndk/
cd $NDK_PATH/build/tools
./make-standalone-toolchain.sh --platform=android-8 --install-dir=$HOME/android-toolchain --ndk-dir=$NDK_PATH –-toolchain=arm-linux-androideabi-4.4.3 --system=darwin-x86_64
export ANDROID_NDK_TOOLCHAIN=$HOME/android-toolchain
export ANDTOOLCHAIN=/path/to/android.toolchain.cmake
export PATH=$PATH:$HOME/path/to/android-sdk/tools
# compile assimp with android toolchain:
git clone git@github.com:assimp/assimp.git
cd assimp
mkdir build.android
cd build.android
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDTOOLCHAIN -DCMAKE_INSTALL_PREFIX=/assimp-2.0 -DANDROID_ABI=armeabi-v7a _DANDROID_NATIVE_API_LEVEL=android-8 -DANDROID_FORCE_ARM_BUILD=TRUE ..
vim code/cMakeFiles/assimp.dir/link.txt
# search for the string "-soname, libassimp.so.3" and replace with "-soname, libassimp.so"
make
cd ../lib
# look for libassimp.so.some_version_number and rename it to libassimp.so
cp libassimp.so /path/to/engine/android/jni/src/libassimp.so
# Now add sdl src
cd /path/to/engine/android/jni/
# Download SDL source to this folder
# setup for android is now done!
cd /path/to/engine/android/
# build src for android with
ndk-build -j8
# create apk with
ant debug
# connect device and install apk with
adb install -r bin/SDLActivity-debug.apk
# view logs from device with
adb logcat | grep EngineLogger
To use the engine in a game build the engine library and include Engine.h in your game.
Eg:
#include "Engine.h"
class CoolGame : public Game
{
public:
virtual void init(void);
private:
Entity *test_entity;
};
void CoolGame::init(void)
{
test_entity = new Entity();
test_entity->addComponent(new MeshRenderer(new Mesh("../assets/monkey3.obj"), new Texture("../assets/t.jpg")));
addToScene(test_entity);
}
int main(int argc, char **argv){
CoolGame game;
Engine gm(&game);
gm.start();
return 0;
}
- Fork it ( http://github.com/Shervanator/Engine/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request