Ogre Engine SettingUpAnApplication - 오거 엔진 셋업 방법 (번역 진행중)

우선, 이 글은 http://www.ogre3d.org/wiki/index.php/SettingUpAnApplication 의 내용을 그대로
가져와서, 번역하였습니다.

중간에 틀린 부분이 많이 있으리라 생각이 됩니다. 이 글을 보시는 분을 생각하기보다는 제 자신이 지금 세팅
문제로 어려움을 겪고 있어, 제대로 된 문서화가 필요하다는 생각에 해석하게 되었습니다.

부디 너그러운 마음으로 글을 읽어주셨으면 좋겠습니다.

------------------------------------------------------------------------------------------------

This page is a guide to setting up your first application. Be sure that you've already installed OGRE by
either Installing An SDK or Building From Source. Beginners should use the first option if available.

이 페이지는 당신이 처음으로 오우거 엔진을 세팅할 때 필요한 가이드 입니다. Installing An SDK 과 Building From Source 가 이미 설치되어 있어야 합니다. 처음 설치 하시는 분 들에게는 가능하다면 첫번째 옵션을 사용 해야 합니다.

Contents

[hide]

Prerequisites (전제 조건)


By this time you should have already worked through Installing An SDK or Building From Source and have OGRE installed on your system. If not, go back to the appropriate page to finish configuring your OGRE.

당신은 이미 SDK를 설치했거나, 빌딩을 통해 성공했어야 하고, OGRE가 여러분의 시스템에 설치되어 있어야 합니다. 만약 그렇지 않다면, 다시 해당 파일로 가서 OGRE 구성을 끝내시기 바랍니다. 

In order to run your application, there are various files that need to be locatable by your system. The list below details these files. [_d] denotes an optional reference to a debug library (ie OgreMain_d.dll instead of OgreMain.dll). These files should be in your working directory, or accessible by an appropriate path.

어플리케이션을 진행하기 위해서는 당신의 시스템에서 설치되어야 하는 여러가지의 파일이 있습니다. 다음 리스트는 그 파일들에 대한 상세한 내용입니다.  [_d] 디버그 라이브러리에 대한 선택적 참조 (즉, OgreMain_d.dll 대신 OgreMain.dll의) 를 의미합니다. 이러한 파일은 여러분의 작업 디렉토리, 또는 적절한 경로로 액세스할 수 있어야 합니다.

On Mac OS X, your project must be run from an application bundle (aka ".app"), otherwise Ogre will not initialise properly. XCode does this for you automatically, but if you don't use XCode you will have to build the bundle manually.
 
Mac OS X에서, 당신의 프로젝트가 응용 프로그램 번들에서 (일명 ".app") 실행되어져야만 합니다. 그렇지 않으면 제대로 초기화되지 않습니다.  Xcode가 자동으로 실행되게 되지만, Xcode를 사용하지 않는 경우에는 수동으로 번들을 구축해야 합니다.

The easiest way to get everything configured is to copy an existing OGRE sample and the media directory into your own working directory. If using Windows, copy all the necessary runtime DLLs to this directory. Edit plugins.cfg and resources.cfg so that the file locations they contain match this new directory.

모든 구성하기 위해 가장 쉬운 방법은 자신이 작업하는 디렉토리에 기존 오우거 샘플과 media 디렉토리를 복사하는 것입니다. 윈도우즈를 사용하는 경우, 모든 필요한 런타임 DLL을 이 디렉토리에 복사합니다. plugins.cfg 편집하고, 이 새로운 디렉토리에  resources.cfg 일치가 들어있는 파일의 위치.

OGRE Libraries & Files
  • OGRE libraries (OgreMain[_d].dll, libOgreMain.so for linux).
  • plugins.cfg - Text file specifying the rendering libraries available to Ogre (ie DX9, OpenGL).
  • All the plugin libraries listed in plugins.cfg (you can remove items from plugins.cfg if you don't wish to use them).
  • resources.cfg - If using the ExampleApplication, a text file specifing paths to materials, textures, models, etc.
  • OgreCore.zip - Ensure resources.cfg has the proper path to this file if you plan to use the OGRE debug panel or profiler.
  • Other Resources used in your program (*.zip; *.png; *.particle; *.mesh; ...).
3rd Party Libraries

The following packages also need to be installed if building from source (not SDK). The libraries (.lib; .a) and header files (.h) will be required for linking and the runtime libraries (win32 .dll; linux .so) necessary for running. If on the Windows platform, it is highly recommended to use the precompiled dependencies available on Source releases. Grab the correct package for your compiler.

These are required:

  • Zlib: zlib1.dll; libz.so (debian: zlib1g, zlib1g-dev)

These are optional:

  • CEGUI: OgreGUIRenderer[_d].dll, CEGUIBase[_d].dll, CEGUITaharezLook[_d].dll, CEGUIWindowsLook[_d].dll, xerces-c_2_5_0.dll
  • CEGUI: libCEGUIBase.so, libCEGUIOgreRenderer.so, libxerces-c.so (debian: libcegui-mk2-0, libcegui-mk2-dev, libxerces26, libxerces26-dev)
  • Cg: cg.dll; libCg.so (debian: nvidia-cg-toolkit)
  • OpenEXR: openexr.dll??; (debian: libopenexr-dev libopenexr2 )
  • ReferenceApp: ReferenceAppLayer.dll
Extras for Microsoft Visual C++ 6 (SP3+)
  • stlport_vc6[_stldebug]46.dll
  • msvcp60[D].dll
  • msvcrt[D].dll
Extras for Microsoft Visual C++.Net 2002
  • stlport_vc7[_stldebug]46.dll
  • msvcp70[d].dll
  • msvcr70[d].dll
Extras for Microsoft Visual C++.Net 2003
  • msvcp71[d].dll
  • msvcr71[d].dll
Extras for Mingw + STLPort
  • libstlport[stlg].5.0.dll
  • mingwm10.dll

Environment Settings

You may want to register an environment variable pointing at the root of the OGRE installation so you can express all your paths relative to that. It can be easier if you ever move things around or onto a different machine. For information on checking and updating environment variables, see the documentation for Windows, Linux and Mac OSX.

  • If you downloaded and installed the precompiled OGRE SDK, you should already have an environment variable called 'OGRE_HOME' registered already, pointing at the folder where you installed. If it isn't there you probably installed under a different user, so define OGRE_HOME manually
  • If you downloaded the source distribution, you should register a new environment variable OGRE_SRC pointing at the 'ogrenew' folder from the OGRE source

Create A Project File

This section is not for extensive compiler/IDE settings. It is only for very short steps to start a new project. This should be very easy to do in any IDE. The source code that will go into the project is below. Create a working directory to store your source code. A standard directory structure separates headers, source files and project files as follows:

work_dir    include       *.h    src       *.cpp    scripts       *.vcproj

Microsoft Visual C++ 6 (SP3+)

Ogre does not provide support for VC6. It's from 1998, and rather old. It does not support ISO C++. It will only cause you pain.

It's recommended to use Visual C++ 2005 Express (also called VC8) instead.

If you absolutely must use that ancient thing, proceed on your own. You are not going to receive any support, other than people telling you to upgrade.


Microsoft Visual C++ .NET

Important:

If you use Visual Studio 2005 (VC8) make sure to get service pack #1 to go with it.


Note: If you are using VC++ .NET 2003 or later, you can use the Ogre Application Wizard and you are ready to create OGRE apps - feel free to skip down to the code section, as the application wizard will set up the project for you. Also see The Complete Blanks Guide To Using The OGRE SDK AppWizard.

Otherwise, to manually configure the IDE, follow these steps:

  1. Create a new project

  2. Choose 'Visual C++ Projects' / 'Win32' then 'Win32 Project'.

  3. Enter a name for your project and change the location to point to a work directory (separate from the runtime directory).
  4. Select 'Windows Application' and 'Empty project' when prompted for the type of project to create.

  5. Create a new source file by selecting 'Project -> Add New Item...'. Make sure the file is in the work directory. This step must be performed before editing project properties (otherwise the 'C/C++' page will be unavailable).
  6. Save the project.

If you named your project "Testproject" and selected a location like C:\Work, and checked the box called "Create directory for solution", with a solution name of "Testsolution", then the directory structure will be: C:\Work\Testsolution\Testproject. If you do not create a directory for the solution, the structure will simply be: C:\Work\Testproject.

To clarify where the DLL files should be, an easy way is to copy the \bin folder (containing \debug and \release) and the \media folder from the OGRE installation directory to your Testproject folder (note: in this case you might be copying DLLs that won't be needed, but it's the hassle-free way). If you follow the convention presented above and you created folders for the header, scripts and source files, you have the following folders under \Testproject (excluding subfolders): 'bin', 'include', 'media', 'testsolution', 'scripts', and 'src'.

If you follow the next few steps carefully, your project should compile without errors.

Configure your project with the following settings. All of these are for the Debug configuration. To set up the Release configuration just change the directories from '\Debug\' to '\Release\'. Select "project properties" and under "configuration properties" add the following:

Debugging : Command                                 = $(OutDir)\$(ProjectName).exeDebugging : Working Directory                       = $(OutDir)C/C++ : Preprocessor : Preprocessor Definitions += _STLP_DEBUG (only in Debug mode, not needed for .Net 2003 and 2005)C/C++ : Code Generation : Use runtime library 	 = Multithreaded Debug DLL (Multithreaded DLL in Release)Linker : General : Output File                            = ..\bin\Debug\[appname].exeLinker : Input : Additional Dependencies                += OgreMain_d.lib (OgreMain.lib in Release)

And, for those using Ogre3D 1.4.x

Linker : Input : Additional Dependencies                += OIS_d.lib (OIS.lib in Release)

And, for those using the SDK:

C/C++ : General : Additional Include Directories 	 = ..\include;$(OGRE_HOME)\include;$(OGRE_HOME)\samples\includeLinker : General : Additional Library Directories         = $(OGRE_HOME)\lib

Or, for those using the source release:

C/C++ : General : Additional Include Directories 	 = ..\include;$(OGRE_SRC)\OgreMain\include;$(OGRE_SRC)\Samples\Common\IncludeLinker : General : Additional Library Directories         = $(OGRE_SRC)\OgreMain\Lib\Debug

Additional hints on getting your application to run from within the IDE:
Visual Studio Debugging Settings

Code::Blocks + MinGW 3.4.5 + STLPort 5.0

Have a look at the build options for Demo_CameraTrack, most of the demos use the same build options.

Note: with MinGW gcc 3.4.5 you can link directly against dll's built by gcc 3.4.5 and do not require an import lib. This is the same setup on Linux where you link directly to the shared object (.so). This is why the SDK does not come with import libs for Ogre. You don't need them.

Build options that you should use:

Normally you will have two targets: Debug and Release.

To create a new target:

  1. Right click on the project in the Management window and select Properties in the popup and this will open up the properties window for your project.
  2. Select the Target tab.
  3. Select Add to define a new target.
  4. Type in the target name ie Debug.
  5. Select OK.

Select Build Options to modify build options for a target.

Project build options

will be used for both Debug and Release target build options:

Image:CB_PCOS.jpg

ensure Selected compiler is: GNU GCC Compiler

  • Compiler
    • Other options
      • -mthreads
      • -fmessage-length=0
      • -fexceptions
      • -fident
    • '#defines'
      • _STLP_NO_CUSTOM_IO
        If your app does not define any custom IO templates then this define will speed up compiles.
      • _STLP_USE_DYNAMIC_LIB
        this ensures that the DLL version of STLPort is used.
  • Linker
    • Other linker options:
      • -Wl,--enable-auto-image-base
      • -Wl,--add-stdcall-alias
  • Directories
    • Compiler
      • $(OGRE_HOME)\stlport\stlport
        VERY IMPORTANT: The stlport include directory has to be first in the include directories. If it is not then headers used for libstdc++ could get included which will cause conflicts with stlport during the link stage. You will most likely get undefined reference error messages with member methods saying they require std::string (method parameters). You should never see std:: in an error message and if you do then it means that the STLPort headers were not found and libstdc++ headers were used instead. If you do end up in this scenerio, after you correct the directory problem you must do a rebuild so that everything gets recompiled with the proper headers. Selecting build won't do it since CB will just attempt to do the link stage again since it doesn't detect any changes in the source and will fail again.
      • $(OGRE_HOME)\include
      • Your project include directories
    • Linker
      • $(OGRE_HOME)\bin\$(TARGET_NAME)
        this is the path to OgreMain.dll or OgreMain_d.dll along with stlport.5.0.dll or stlportstlg.5.0.dll depending on TARGET_NAME state. $(TARGET_NAME) is a built in Code::Blocks macro that you can use in your project settings. It gives you the active project target build name.

Debug build target options:

Image:CB_DTOS.jpg

ensure Selected compiler is: GNU GCC Compiler
set Policy to 'Append target options to project options'

  • Compiler
    • '#defines'
      • WIN32
      • _DEBUG
      • _WINDOWS
      • _STLP_DEBUG
        this tells STLPort to use the special debug build version of the dll
  • Linker
    • Link libraries:
      • Your project dll's or static libs (.a)
      • OgreMain_d
        this is the name of the debug build of OgreMain dll.
      • stlportstlg.5.0
        this must be the last entry

Release build target options:

ensure Selected compiler is: GNU GCC Compiler
set Policy to 'Append target options to project options'

  • Compiler
    • '#defines'
      • WIN32
      • NDEBUG
      • _WINDOWS
  • Linker
    • Link libraries:
      • Your project dll's or static libs (.a)
      • OgreMain
        this is the name of the release build of OgreMain dll.
      • stlport.5.0
        this must be the last entry

Note: OGRE_HOME is a pre-defined environment variable setup by the SDK installer. OGRE_HOME points to the directory where the SDK is installed. You can use $(OGRE_HOME) within your build options when setting up paths to specific directories with the SDK that you will need to access.

WARNING Do not mix dll and static object builds using different STL implementations. Here is an example: You build a dll using stdlibc++ but your exe is built using STLPort. Everything that is c++ must be built using STLPort. This does not apply to C static libs and dll's.

Gnu Compiler Collection (gcc) v3.x (using make)

Make sure you are using gcc 3.x. Many Linux distributions still come with gcc 2.95.x which does not have as good support for the ISO C++ standard and will probably cause you problems. Please install the latest stable version of gcc 3.x.

Create a file called 'Makefile' in your application folder, with the following contents. Later you can replace SampleApp with your own program file name.

DEFINES =LIBS = OGRECXX = g++CXXFLAGS = $(shell pkg-config --cflags $(LIBS)) $(DEFINES)LD = g++LDFLAGS = $(shell pkg-config --libs $(LIBS))all:	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o SampleApp SampleApp.cppclean:	rm -f SampleApp

When you are ready to start working with multiple files and even incorporating CEGUI, your Makefile might look like the following example. Make will expect to find SampleApp.cpp, camera.cpp and listener.cpp:

## Compiler and linker settingsDEFINES = -gLIBS = OGRE CEGUI-OGRE CEGUICXX = g++CXXFLAGS = $(shell pkg-config --cflags $(LIBS)) $(DEFINES)LD = g++LDFLAGS = $(shell pkg-config --libs $(LIBS))## Files to include in yourApp projectSAMPLEAPP = SampleApp.o camera.o listener.o## Compilation and linking occurs hereall: SampleApp	$(LD) $(LDFLAGS) $(SAMPLEAPP) -o SampleAppSampleApp: $(SAMPLEAPP)## Clean upclean:	rm -f $(SAMPLEAPP) SampleApp

XCode

  • In XCode, select menu File > New project > Carbon Application.
  • Place your project wherever you want and name it, then click finish
  • Remove main.nib and *_Prefix.pch (note: if you wish to use a precompiled prefix header, you may, just adapt the instructions as needed)
  • rename main.c to main.cpp. Remove its content and replace it with Ogre code (for instance http://www.ogre3d.org/wiki/index.php/BasicTutorial2Source).


  • Add Ogre.framework and Cg.framework to your project by right-clicking on your project name in the tree and selecting Add > Existing frameworks. Add the IOKit framework from system directories the same way.
  • Add static library libois.a the same way (libFreeImage.a, libfreetype.a libzzip.a were also previously required but apparently are no more).

(These libraries are all provided in the Ogre dependencies download except Ogre.framework that you either got from the mac SDK or built from source.) (As of Ogre 1.4.5, I had better success with the CVS version of OIS on mac. OIS versions greater than 1.0 should be all okay though.)

Now you must add the required config files to your project. You can find these files in Ogre/Mac/Samples/config Just drag and drop them to the file tree and they should automatically be copied to the Resources directory of your app. Whenever you add data or source files to the project, make sure you check the copy items checkbox in the dialog that pops-up before confirming file addition because you don't want to modify the original files. There is no need to do that with libraries though.

  • plugins.cfg
  • media.cfg
  • resources.cfg : you will need to edit this one to point inside your application. here is an example of resources.cfg file to work with the samples and tutorials
# Resource locations to be added to the 'boostrap' path# This also contains the minimum you need to use the Ogre example framework[Bootstrap]Zip=Contents/Resources/Media/packs/OgreCore.zip# Resource locations to be added to the default path[General]FileSystem=Contents/Resources/MediaFileSystem=Contents/Resources/Media/fontsFileSystem=Contents/Resources/Media/materials/programsFileSystem=Contents/Resources/Media/materials/scriptsFileSystem=Contents/Resources/Media/materials/texturesFileSystem=Contents/Resources/Media/modelsFileSystem=Contents/Resources/Media/overlaysFileSystem=Contents/Resources/Media/particleFileSystem=Contents/Resources/Media/guiFileSystem=Contents/Resources/Media/DeferredShadingMediaZip=Contents/Resources/Media/packs/cubemap.zipZip=Contents/Resources/Media/packs/cubemapsJS.zipZip=Contents/Resources/Media/packs/dragon.zipZip=Contents/Resources/Media/packs/fresneldemo.zipZip=Contents/Resources/Media/packs/ogretestmap.zipZip=Contents/Resources/Media/packs/skybox.zip
  • Media : found in Ogre/Samples (if you want to run the samples or tutorials. make sure you create folder references and not group references - you can choose that in the dialog that pops-up just after you dragged and dropped the folder onto the tree)


  • Open targets in the file tree
  • Right-click on your target, select get info, go in tab build
  • In configuration, make sure to select all configurations when you make changes that should apply to both debug and release
  • In collection architectures, double-click on element Architectures in the list and select the architectures you wish to build (and have built Ogre for). If you build Universal binary, make sure the SDK path in build locations is a universal one (for instance /Developer/SDKs/MacOSX10.4u.sdk. This template should set it to universal by default.).
  • In linking, disable ZeroLink
  • In language, remove the file in Prefix Header and uncheck Precompile prefix header
  • In search paths, add the path to includes provided in Ogre dependencies (double-click on header search paths, drag and drop the OgreDependencies-1.4.5/include folder there)


Existing projects will try to include Ogre.h and not <Ogre/Ogre.h> like frameworks usually require, so you may want to set up an additional header search path pointing inside your Ogre framework headers directory.

If you want to use the samples or tutorials you will also need to copy example application header files from /ogre-1.4.5/Samples/Common/include/

You will now need a copy files build step in your target:

  • Right-click on your target
  • select Add > New Build Phase > New Copy File Build Phase
  • In the window that pops up, select Frameworks in the destination field, don't change any other settings.
  • Now expand your target in the tree view and you should see the new step you just added as a child of your target, by befault named something like Copy Files.
  • Drag and drop all Ogre-related frameworks (including those from Ogre dependencies) inside the new build step you just created.
  • Warning, files you add to the project from now on will tend to add themselves to the copy files build step, make sure only frameworks find their way there.

You are now ready to build and run!

Once you're done, put a copy of your project in ~/Library/Application Support/Developer/Shared/Xcode/Project Templates/Application/, so next time you can just select New project and choose this one from the template list (in older versions of OSX/Xcode, the templates directoy was at ~/Library/Application Support/Apple/Developer Tools/Project Templates)

Autotools

To build your application using the ubiquitous GNU autotools (autoconf + automake + libtool), create these files in your project folder with the following content:

bootstrap
#!/bin/shrm -rf autom4te.cachelibtoolize --force --copy && \aclocal && \autoheader && \automake --add-missing --force-missing --copy --foreign && \autoconf
configure.ac
AC_INIT(configure.ac)AM_INIT_AUTOMAKE(SampleApp, 0.1)AM_CONFIG_HEADER(config.h)AC_LANG_CPLUSPLUSAC_PROG_CXXAM_PROG_LIBTOOLPKG_CHECK_MODULES(OGRE, [OGRE >= 1.2])AC_SUBST(OGRE_CFLAGS)AC_SUBST(OGRE_LIBS)PKG_CHECK_MODULES(OIS, [OIS >= 1.0])AC_SUBST(OIS_CFLAGS)AC_SUBST(OIS_LIBS)AC_CONFIG_FILES(Makefile include/Makefile src/Makefile)AC_OUTPUT
Makefile.am
SUBDIRS = include srcEXTRA_DIST = bootstrapAUTOMAKE_OPTIONS = foreign
include/Makefile.am
noinst_HEADERS= SampleApp.h
src/Makefile.am
bin_PROGRAMS= SampleAppSampleApp_CPPFLAGS= -I$(top_srcdir)/includeSampleApp_SOURCES= SampleApp.cppSampleApp_CXXFLAGS= $(OGRE_CFLAGS) $(OIS_CFLAGS)SampleApp_LDADD= $(OGRE_LIBS) $(OIS_LIBS)

See Your First Application or Minimal Application to create include/SampleApp.h and src/SampleApp.cpp.
You probably want to add plugins.cfg and resources.cfg to the executable folder (src) (see Prerequisites).

To build your app run ./bootstrap && ./configure && make. Subsequent builds only need running make.
To execute your app go to the src folder and run ./SampleApp.

Scons

Scons is a multiplatform building tool programmed in Python, designed to replace GNU Make and other similar tools (autoconf, automake, etc).

For compiling using scons, you'll only need to type:

 scons

in your command line. The scons building tool will automatically check for all needed libraries and include files in your system before trying to compile.

For using scons, you'll need to create a SConstruct file. You'll had to pay a visit to scons.org to learn the directives for building with that tool. But here we provide a sample SConstruct file, that will build both in Ubuntu Linux and in Windows (using Visual Studio 2003 at least).

For a simple program composed by a file named main.cpp, using Ogre Eihort and OIS, this would be the SConstruct file needed:

platform = ARGUMENTS.get('OS', Platform())mode = ARGUMENTS.get('mode', "release")if platform.name == "linux":   listinc=[      # our main include directory      'include',      # location of ogre includes      '/usr/local/include/OGRE',      # location of ois includes      '/usr/local/include/OIS',      ]else:   listinc=[      # our main include directory      'include',      # location of ogre includes      'E:/ogre-eihort/ogrenew/OgreMain/include',      # location of ois includes      'E:/ogre-eihort/ogrenew/Dependencies/include/OIS',      ]if platform.name == "linux":   debugcflags=['-g']   releasecflags=[]   if mode=="debug":      env=Environment(CPPPATH=listinc, LIBPATH='.', CCFLAGS = debugcflags)   else:      env=Environment(CPPPATH=listinc, LIBPATH='.', CCFLAGS = releasecflags)else:   debugcflags = ['-W1', '-GX', '-EHsc', '-D_DEBUG', '/MDd', '/Zi']   #extra compile flags for debug   releasecflags = ['-O2', '-EHsc', '-DNDEBUG', '/MD']         #extra compile flags for release   if mode=="debug":      env=Environment(CPPPATH=listinc, LIBPATH='bin/windows/debug'          , CCFLAGS = debugcflags, CPPDEFINES=["WIN32", "_DEBUG", "_WINDOWS"], LINKFLAGS='/DEBUG'           )   else:      env=Environment(CPPPATH=listinc, LIBPATH='bin/windows/release'          , CCFLAGS = releasecflags, CPPDEFINES=["WIN32", "NDEBUG", "_WINDOWS"]           )# check for required include files and librariesconf = Configure(env)if not conf.CheckCXXHeader('Ogre.h'):   print 'Ogre must be installed!'   Exit(1)if not conf.CheckCXXHeader('OISPrereqs.h'):   print 'OIS must be installed!'   Exit(1)if platform.name == "linux":   if not conf.CheckLib('OgreMain'):      print 'OgreMain library must be in path'      Exit(1)   if not conf.CheckLib('OIS'):      print 'OIS library must be in path'      Exit(1)# list of files needed for compiling the programmain_program_list=Split("""   src/main.cpp   """)if platform.name == "linux":   # list of libraries needed for linking   libs_list=Split("""      OgreMain      OIS      """)else:   # list of libraries needed for release   libs_release_list=Split("""      c:/ogre-eihort/ogrenew/OgreMain/lib/Release/OgreMain      c:/ogre-eihort/ogrenew/Dependencies/lib/Release/OIS      kernel32.lib      user32.lib      gdi32.lib      winspool.lib      comdlg32.lib      advapi32.lib      shell32.lib      ole32.lib      oleaut32.lib      uuid.lib      odbc32.lib      odbccp32.lib      """)   # list of libraries needed for debug   libs_debug_list=Split("""      c:/ogre-eihort/ogrenew/OgreMain/lib/Debug/OgreMain_d      c:/ogre-eihort/ogrenew/Dependencies/lib/Debug/OIS_d      kernel32.lib      user32.lib      gdi32.lib      winspool.lib      comdlg32.lib      advapi32.lib      shell32.lib      ole32.lib      oleaut32.lib      uuid.lib      odbc32.lib      odbccp32.lib      """)if platform.name == "linux":   if mode=="debug":      env.Program('bin/linux/debug/main_d', main_program_list, LIBS=libs_list, LIBPATH='.')   else:      env.Program('bin/linux/release/main', main_program_list, LIBS=libs_list, LIBPATH='.')else:   if mode=="debug":      env.Program('bin/windows/debug/main_d', main_program_list, LIBS=libs_debug_list, LIBPATH='.')   else:      env.Program('bin/windows/release/main', main_program_list, LIBS=libs_release_list, LIBPATH='.')


You might need to change the file paths in the file though.

Use:

  • Put your main.cpp file in directory src; create the following empty directories:
includebin/windows/debugbin/windows/releasebin/linux/debugbin/linux/release
  • In linux, write any of the following lines in the command line:
scons OS=linux mode=debug # build in debug modescons OS=linux # build in release modescons OS=linux mode=debug -c # clean in debug modescons OS=linux -c # clean in release mode

In windows, use the following lines:

  • For debug build:
scons MSTOOLKIT=yes OS=windows mode=debug
  • For release build:
scons MSTOOLKIT=yes OS=windows
  • For debug clean:
scons MSTOOLKIT=yes OS=windows mode=debug -c
  • For release clean:
scons MSTOOLKIT=yes OS=windows -c

Alternate Scons File

Please actually read this file, it's easy to understand and will require some modification for use.

# A Linux Ogre/CEGUI/OIS/OgreOde build Script by Grey, with many thanks to keir from #scons on freenode.# Setup our Build Environment, Smarter scripts might be able to change this at the command line,env = Environment(   CCFLAGS='-ggdb -pg -g3 -DEXT_HASH',   LDFLAGS='-pg')# Our External Libs# Got some fugly stuff ( || true ) in there to supress unreadable crashes, it# ends up using the nicer formatted error messages below env.ParseConfig('pkg-config --silence-errors --libs --cflags OGRE || true')env.ParseConfig('pkg-config --silence-errors --libs --cflags OIS || true')env.ParseConfig('pkg-config --silence-errors --libs --cflags CEGUI-OGRE || true')env.ParseConfig('pkg-config --silence-errors --libs --cflags OgreOde_Core || true')# Get out current config so we can verify we have everything we need.# There is an autoadd method here, but then we'd have to specify full paths for # the libs and headers, which is lame.config = Configure(env);# Everyone needs OIS :)if not config.CheckLibWithHeader('OIS', 'OISPrereqs.h', 'C++'): print 'OIS must be installed!' Exit(1)# this should work to get Ogre includedif not config.CheckLibWithHeader( 'OgreMain', 'Ogre.h', 'C++' ): print "Ogre Must be installed!" Exit(1)# Any other component libraries you use can be added and tested in this mannerif not config.CheckLibWithHeader( 'OgreOde_Core', 'OgreOde_Core.h', 'C++'): print 'OgreOde must be installed!' Exit(1);# Substitute with your GUI of choiceif not config.CheckLibWithHeader('CEGUIBase', 'CEGUI.h', 'C++'): print "You need CEGUI to compile this program" Exit(1);if not config.CheckLibWithHeader('CEGUIOgreRenderer', 'OgreCEGUIRenderer.h', 'C++'): print "You need OGRE-CEGUI to compile this program" Exit(1);# Validate the configuration and assign it to our envenv = config.Finish(); # Build our main programenv.Program(   target = 'main',   # Replace these with your source files of course   source = [       'main.cpp', 'GUISystem.cpp', 'EventQueue.cpp', 'InputManager.cpp',       'CommandListener.cpp', 'CameraController.cpp', 'KeyMap.cpp',       'OdeManager.cpp', 'PhysModel.cpp', 'ODECharacterController.cpp', 'RayCharacterController.cpp',       'ChaseCameraController.cpp'])

Eclipse

See the Eclipse setup pages for Ogre IDE Eclipse.

Anjuta IDE

A complete working project and sample can be found here: http://waxor.com/page/ogre-dome.tgz

  1. Create a new Generic/Terminal App project.
  2. Choose c++ and Executable target when prompted.
  3. Delete all of the included template code in main.cc. It will be replaced with the sample code below.
  4. Go to the Settings Menu and choose Compilier and Linker Settings.
  5. Open the following tabs and add each entry one line at a time: replace $OGRE_HOME/ with the full path to the ogrenew folder you compiled from. Also note you may have Ogre in /usr/local/include and /usr/local/lib depending on how you installed it.
Include Paths:
        $OGRE_HOME/Samples/Common/include        /usr/include/OGRE               (Not necessary if you include like this '#include <OGRE/Ogre.h>')        /usr/include/CEGUI        /usr/include/OIS
Library paths:
        /usr/local/lib
Libraries:
        OgreMain        CEGUIBase        CEGUIOgreRenderer        OIS
Options
         check "Enable Debugging" (adds -g to the command line)
Options | Compilier flags (CFLAGS):
        -DEXT_HASH

KDevelop IDE

KDevelop is a nice flexible IDE for Linux, and it is easy to set up with OGRE.

  • Create a new C++ "Simple Hello world program" project.
  • Open "configure.in" and add the following line above the AC_OUTPUT statement.
PKG_CHECK_MODULES(OGRE, [OGRE >= 1.2.0])
  • Open "src/Makefile.am" and add the following lines.
LDADD = @OGRE_LIBS@AM_CXXFLAGS = @OGRE_CFLAGS@ 
  • To avoid linker errors, add these lines to src/Makefile.am
sampleapp_LDADD = /usr/local/lib/libOIS.so \/usr/local/lib/libOgreMain.so
  • You may need to change /usr/local/lib/ to the location of your OGRE/OIS libs. Also, you if you get errors about missing libs later, you will have to link/copy them to /lib or /lib64.
  • You may wish to have the program run in the sample apps directory when debuging so you do not have to copy all the runtime resource files over. To do this go into project options (top menu) then click run options, then select the custom directory option and put in "<insert ogre root dir here>/Samples/Common/bin/"
  • If you choose to derive your application from the ExampleApplication class that comes with OGRE, open the automake manager, right click on your target, choose "Add Existing Files..." and add the files ExampleFrameListener.h and ExampleApplication.h from ogrenew/Samples/Common/include.
  • You also need to tell KDevelop where to find the OGRE specific headers. Click on Project->Project Settings->Configure Options, click on the C++ tab and add the following line to "Compiler flags (CXXFLAGS)" :

-I <insert ogre root dir here>OgreMain/include -I <insert ogre root dir here>OgreMain/include/GLX

  • Insert the SampleApp code below for the application, build and run the project.
  • To use the debugger, open the projects options, choose the debugger tab and select "Enable separate terminal for application IO".

Cross compiling Win32 applications in Linux

How to compile applications for MS Windows platform from within Linux: Article.

Your First Application

Now we will create a basic source file for starting an OGRE application. This program, like the included samples, uses the example framework.


Copy the following code and include it as a new file in your project settings. Following our conventions, you'd put it in work_dir/src and name it SampleApp.cpp. Since this is dependent upon ExampleApplication.h and ExampleFrameListener.h make sure these files are accessible by your project. Our convention would have you put them in work_dir/include. You can copy them from the Samples directory.

#include "ExampleApplication.h"// Declare a subclass of the ExampleFrameListener classclass MyListener : public ExampleFrameListener{public:    MyListener(RenderWindow* win, Camera* cam) : ExampleFrameListener(win, cam)    {    }    bool frameStarted(const FrameEvent& evt)    {        return ExampleFrameListener::frameStarted(evt);            }    bool frameEnded(const FrameEvent& evt)    {        return ExampleFrameListener::frameEnded(evt);            }};// Declare a subclass of the ExampleApplication classclass SampleApp : public ExampleApplication {public:   SampleApp()    {   }protected:   // Define what is in the scene   void createScene(void)   {       // put your scene creation in here   }     // Create new frame listener   void createFrameListener(void)   {       mFrameListener = new MyListener(mWindow, mCamera);       mRoot->addFrameListener(mFrameListener);   }};#ifdef __cplusplusextern "C" {#endif#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 #define WIN32_LEAN_AND_MEAN #include "windows.h" INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) #else int main(int argc, char **argv) #endif {    // Instantiate our subclass    SampleApp myApp;    try {        // ExampleApplication provides a go method, which starts the rendering.        myApp.go();    }    catch (Ogre::Exception& e) {#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32         MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);#else        std::cerr << "Exception:\n";        std::cerr << e.getFullDescription().c_str() << "\n";#endif        return 1;    }return 0;}#ifdef __cplusplus}#endif

Compile this code now. However before running the program, make sure you have a plugins.cfg and a resources.cfg in the same directory as the executable. Review the Prerequisites section for the purpose of these files. Edit them and make sure the paths are correct. Otherwise your OGRE setup dialog box may not have any rendering libraries in it, or you may recieve an error on your screen or in Ogre.log that looks something like this:

Description: ../../Media/packs/OgreCore.zip - error whilst opening archive: Unable to read zip file

When the program starts it will display the OGRE setup dialog and start the application with a blank, black screen containing little more than the OGRE logo and an FPS (frame per second) display. We haven't added anything to this scene yet, as evidenced by the empty createScene method. Press ESC to quit the application.

If you didn't get this, something is not right in your setup. See the Prerequisites and the Getting Help sections to review your installation.

The ExampleApplication framework will boot the OGRE system, displaying a configuration dialog, create a window, setup a camera and respond to the standard mouselook & WSAD controls. All you have to do is to fill in the 'createScene' implementation. If you want to do more advanced things like adding extra controls, choosing a different scene manager, setting up different resource locations, etc, you will need to override more methods of ExampleApplication and maybe introduce a subclass of ExampleFrameListener.

As mentioned before, you don't have to use the ExampleApplication and ExampleFrameListener base classes. Use them to work through the tutorials and to test things out. For larger projects you'll want to write your own framework, or use one of the frameworks or engines available on Projects using OGRE.

Note for American readers

Sinbad the lead developer and creator of OGRE, is British. Naturally he uses British spellings such as "Colour", "Initialise" and "Normalise". Watch out for these spellings in the API.

See below to learn about your resources for getting help. Then your next step is to work through the Ogre Tutorials.

Getting Help

Probably the top two problems people have with Ogre are not being able to compile or a missing dependency. For the first, you are going to need to learn how to use your compiler. If you barely know C++ then expect a challenge, but don't give up! Thousands of people have successfully gotten Ogre to work with both the GCC and MSVC compilers, so look in the wiki and forums for what they have done that you haven't. For missing dependencies, these are libraries that aren't installed, that aren't linked against your program, or that aren't in your runtime path. Other dependencies are incorrect rendering plugins in your plugins.cfg file or incorrect paths in your resources.cfg file, or missing one of the files all together.

If you have problems reread this page as well as Installing An SDK and Building From Source and look in the Ogre.log file. You may also find your problem answered in the Build FAQ. If you need further help, search the forums. It is likely your problem has happened to others many times. If this is a new issue, read the forum rules then ask away. Make sure to provide relevant details from your Ogre.log, exceptions, error messages, and/or debugger back traces. Be specific and people will be more able to help you.