From: <kal...@us...> - 2009-12-26 16:15:37
|
Revision: 2770 http://ogreaddons.svn.sourceforge.net/ogreaddons/?rev=2770&view=rev Author: kallaspriit Date: 2009-12-26 16:15:26 +0000 (Sat, 26 Dec 2009) Log Message: ----------- Included Minimal OgreNewt Application Project as a demo that is entirely stand-alone and does not use the example framework. See http://www.ogre3d.org/wiki/index.php/OgreNewt_Minimal_Simple_Application_Project for more information. Modified Paths: -------------- branches/ogrenewt/newton20/OgreNewt.sln branches/ogrenewt/newton20/OgreNewt.suo Added Paths: ----------- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/INSTALL.txt branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.sln branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.suo branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.vcproj branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Application.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/FirstPersonCameraController.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/MouseCursor.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Picker.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/PrimitiveFactory.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/ScreenWriter.h branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/bluehigh.ttf branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/consolas.ttf branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/debug.fontdef branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/gui/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/gui/cursor.png branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/scripts/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/scripts/debug.material branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/meshes/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/meshes/sandbox.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/box.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/chamfercylinder.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cone.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cylinder.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/ellipsoid.mesh branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/Application.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/FirstPersonCameraController.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/MouseCursor.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/Picker.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/PrimitiveFactory.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/ScreenWriter.cpp branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/main.cpp Modified: branches/ogrenewt/newton20/OgreNewt.sln =================================================================== --- branches/ogrenewt/newton20/OgreNewt.sln 2009-12-26 14:45:47 UTC (rev 2769) +++ branches/ogrenewt/newton20/OgreNewt.sln 2009-12-26 16:15:26 UTC (rev 2770) @@ -37,6 +37,11 @@ {C28C7710-76B1-4FFD-A85A-9AEFDA25EE64} = {C28C7710-76B1-4FFD-A85A-9AEFDA25EE64} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinimalOgreNewt", "demos\MinimalOgreNewtApplication\MinimalOgreNewt.vcproj", "{44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}" + ProjectSection(ProjectDependencies) = postProject + {C28C7710-76B1-4FFD-A85A-9AEFDA25EE64} = {C28C7710-76B1-4FFD-A85A-9AEFDA25EE64} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -93,6 +98,12 @@ {2C1C0690-C7DD-4800-9E3F-52E3C3FF7F33}.Release|Win32.ActiveCfg = Release|Win32 {2C1C0690-C7DD-4800-9E3F-52E3C3FF7F33}.Release|Win32.Build.0 = Release|Win32 {2C1C0690-C7DD-4800-9E3F-52E3C3FF7F33}.Release|x64.ActiveCfg = Release|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Debug|Win32.ActiveCfg = Debug|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Debug|Win32.Build.0 = Debug|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Debug|x64.ActiveCfg = Debug|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Release|Win32.ActiveCfg = Release|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Release|Win32.Build.0 = Release|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE Modified: branches/ogrenewt/newton20/OgreNewt.suo =================================================================== (Binary files differ) Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/INSTALL.txt =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/INSTALL.txt (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/INSTALL.txt 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,62 @@ +INSTALLATION + +This package includes the release build, so you can see what you are dealing with. Debug build and +dll's are not included. + +1. Get Ogre + - http://www.ogre3d.org/ + - Get precompiled libraries + - Or compile yourself + - Set enviroment variable "OGRE_HOME" to ogre home directory + > for example "C:\Ogre3D" + > includes will be searched in $(OGRE_HOME)\OgreMain\include + +2. Get latest Boost C++ libraries + - http://www.boost.org/ + - Just install anywhere + - Set enviroment variable "BOOST_HOME" to boost directory + > for example "C:\Boost" + +3. Get Newton Game Dynamics + - http://newtondynamics.com/forum/ + > there is a "Newton 2 BETA" link at the top, this may change in the future, but you'll find it + - Install it + - Set enviroment variable "NEWTON_HOME" to install directory + > for example "C:\NDG\2.15" + +4. Get OgreNewt + - Latest can be downloaded from SVN at https://svn.ogre3d.org/svnroot/ogreaddons/branches/ogrenewt/newton20 + > you can't download from this url using your browser, you need to use SVN client + > for example, use GUI SVN client TortoiseSVN (http://tortoisesvn.tigris.org/) + > google how to use it, basically just download and istall it, make a folder for ogrenewt, right click the + folder, choose "SVN Checkout...", enter the SVN url above and do the checkout. + - The OgreNewt Visual studio project is a bit messed up, you can use the one that comes with this project + in "ogrenewt" directory. Just copy the solution and project files to the folder you checked out ogrenewt, + overwrite existing files and open the solution. The modified project uses the enviroment variables you + defined above so everything should compile without any changes to the project (may not be the case if you + did not compile Ogre yourself, you might have to change the include and library directories). + - Set enviroment variable "OGRENEWT_HOME" to OgreNewt root directory + > for example "C:\Ogre3D\Addons\OgreNewt" + +5. Copy DLLs + - If everything is set up right, the dll's will be automaticly copied to the right location, if not: + - Copy OgreMain.dll, Plugin_CgProgramManager.dll, Plugin_OctreeSceneManager.dll, RenderSystem_Direct3D9.dll, + RenderSystem_GL.dll from OGRE_HOME\lib directory to this projects' root directory + - Copy OgreMain_d.dll, Plugin_CgProgramManager_d.dll, Plugin_OctreeSceneManager_d.dll, RenderSystem_Direct3D9_d.dll, + RenderSystem_GL_d.dll from OGRE_HOME\lib directory to this projects' root directory if you also want to + use debug mode + - Copy cg.dll and OIS.dll from OGRE_HOME\Samples\Common\bin\Release (and OIS_d.dll from OGRE_HOME\Samples\Common\bin\Debug + for debug) to project root directory + - Copy newton.dll from NEWTON_HOME\sdk\x32\dll_vs9 to project root directory + - Copy OgreNewt.dll (and OgreNewt_d.dll for debug) from OGRENEWT_HOME\lib to project root directory + +6. Compile the application + - Open NGD.sln, choose Release or Debug configuration and hit Compile (F7) + - Release configuration compiles to release.exe and debug to.. you guessed it, debug.exe + - If I got this tutorial right and you did everything correctly, it should compile out of the box and work! + +7. Experiment + - The code provided is pretty much the minimum for a working application with input and debugging + - No Ogre sample framework is used + - The code has not been organised to great depth to make the learning curve simpler. You can modify it to + use better organization, state managment and so on. \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.sln =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.sln (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.sln 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinimalOgreNewt", "MinimalOgreNewt.vcproj", "{44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Debug|Win32.ActiveCfg = Debug|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Debug|Win32.Build.0 = Debug|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Release|Win32.ActiveCfg = Release|Win32 + {44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.suo =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.suo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.vcproj =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.vcproj (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/MinimalOgreNewt.vcproj 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="windows-1257"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="9,00" + Name="MinimalOgreNewt" + ProjectGUID="{44F65D14-7093-4B8F-BE0F-95D5D31CFBBC}" + RootNamespace="NGD" + Keyword="Win32Proj" + TargetFrameworkVersion="196613" + > + <Platforms> + <Platform + Name="Win32" + /> + </Platforms> + <ToolFiles> + </ToolFiles> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="." + IntermediateDirectory="obj\debug" + ConfigurationType="1" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + CommandLine="copy $(OGRENEWT_HOME)\lib\OgreNewt_d.dll $(OutDir)\OgreNewt_d.dll

if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\OgreMain_d.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\OgreMain_d.dll" "$(OutDir)\OgreMain_d.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\OIS_d.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\OIS_d.dll" "$(OutDir)\OIS_d.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\Plugin_CgProgramManager_d.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\Plugin_CgProgramManager_d.dll" "$(OutDir)\Plugin_CgProgramManager_d.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\RenderSystem_Direct3D9_d.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\RenderSystem_Direct3D9_d.dll" "$(OutDir)\RenderSystem_Direct3D9_d.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\RenderSystem_GL_d.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\RenderSystem_GL_d.dll" "$(OutDir)\RenderSystem_GL_d.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Debug\cg.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Debug\cg.dll" "$(OutDir)\cg.dll"

if exist "$(OGRE_HOME)\bin\debug\OgreMain_d.dll" copy "$(OGRE_HOME)\bin\debug\OgreMain_d.dll" "$(OutDir)\OgreMain_d.dll"
if exist "$(OGRE_HOME)\bin\debug\OIS_d.dll" copy "$(OGRE_HOME)\bin\debug\OIS_d.dll" demos\bin\Debug\OIS_d.dll"
if exist "$(OGRE_HOME)\bin\debug\Plugin_CgProgramManager_d.dll" copy "$(OGRE_HOME)\bin\debug\Plugin_CgProgramManager_d.dll" demos\bin\Debug\Plugin_CgProgramManager_d.dll"
if exist "$(OGRE_HOME)\bin\debug\RenderSystem_Direct3D9_d.dll" copy "$(OGRE_HOME)\bin\debug\RenderSystem_Direct3D9_d.dll" demos\bin\Debug\RenderSystem_Direct3D9_d.dll"
if exist "$(OGRE_HOME)\bin\debug\RenderSystem_GL_d.dll" copy "$(OGRE_HOME)\bin\debug\RenderSystem_GL_d.dll" demos\bin\Debug\RenderSystem_GL_d.dll"
if exist "$(OGRE_HOME)\bin\debug\cg.dll" copy "$(OGRE_HOME)\bin\debug\cg.dll" demos\bin\Debug\cg.dll"

copy $(NEWTON_HOME)\sdk\x32\dll_vs9\newton.dll $(OutDir)\newton.dll
copy $(NEWTON_HOME)\sdk\x32\JointLibrary_d.dll $(OutDir)\JointLibrary_d.dll
" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(NEWTON_HOME)\sdk";"$(BOOST_HOME)\";"$(OGRE_HOME)\OgreMain\include";"$(OGRE_HOME)\Dependencies\include";"$(OGRE_HOME)\Dependencies\include\ois";"$(OGRENEWT_HOME)\inc";.\include" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;OIS_DYNAMIC_LIB" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="0" + WarningLevel="3" + DebugInformationFormat="4" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="newton.lib OgreMain_d.lib OIS_d.lib OgreNewt_d.lib" + OutputFile="$(OutDir)\debug.exe" + LinkIncremental="2" + AdditionalLibraryDirectories=""$(OGRE_HOME)\lib";"$(OGRE_HOME)\Dependencies\lib\Debug";"$(OGRENEWT_HOME)\lib";"$(NEWTON_HOME)\sdk\x32\dll_vs9"" + GenerateDebugInformation="true" + SubSystem="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="." + IntermediateDirectory="obj\release" + ConfigurationType="1" + CharacterSet="2" + WholeProgramOptimization="1" + > + <Tool + Name="VCPreBuildEventTool" + CommandLine="copy $(OGRENEWT_HOME)\lib\OgreNewt.dll $(OutDir)\OgreNewt.dll

if exist "$(OGRE_HOME)\Samples\Common\bin\Release\OgreMain.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\OgreMain.dll" "$(OutDir)\OgreMain.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Release\OIS.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\OIS.dll" "$(OutDir)\OIS.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Release\Plugin_CgProgramManager.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\Plugin_CgProgramManager.dll" "$(OutDir)\Plugin_CgProgramManager.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Release\RenderSystem_Direct3D9.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\RenderSystem_Direct3D9.dll" "$(OutDir)\RenderSystem_Direct3D9.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Release\RenderSystem_GL.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\RenderSystem_GL.dll" "$(OutDir)\RenderSystem_GL.dll"
if exist "$(OGRE_HOME)\Samples\Common\bin\Release\cg.dll" copy "$(OGRE_HOME)\Samples\Common\bin\Release\cg.dll" "$(OutDir)\cg.dll"

if exist "$(OGRE_HOME)\bin\release\OgreMain.dll" copy "$(OGRE_HOME)\bin\release\OgreMain.dll" "$(OutDir)\OgreMain.dll"
if exist "$(OGRE_HOME)\bin\release\OIS.dll" copy "$(OGRE_HOME)\bin\release\OIS.dll" "$(OutDir)\OIS.dll"
if exist "$(OGRE_HOME)\bin\release\Plugin_CgProgramManager.dll" copy "$(OGRE_HOME)\bin\release\Plugin_CgProgramManager.dll" "$(OutDir)\Plugin_CgProgramManager.dll"
if exist "$(OGRE_HOME)\bin\release\RenderSystem_Direct3D9.dll" copy "$(OGRE_HOME)\bin\release\RenderSystem_Direct3D9.dll" "$(OutDir)\RenderSystem_Direct3D9.dll"
if exist "$(OGRE_HOME)\bin\release\RenderSystem_GL.dll" copy "$(OGRE_HOME)\bin\release\RenderSystem_GL.dll" "$(OutDir)\RenderSystem_GL.dll"
if exist "$(OGRE_HOME)\bin\release\cg.dll" copy "$(OGRE_HOME)\bin\release\cg.dll" "$(OutDir)\cg.dll"

copy $(NEWTON_HOME)\sdk\x32\dll_vs9\newton.dll $(OutDir)\newton.dll
copy $(NEWTON_HOME)\sdk\x32\JointLibrary.dll $(OutDir)\JointLibrary.dll
" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="2" + EnableIntrinsicFunctions="true" + AdditionalIncludeDirectories=""$(NEWTON_HOME)\sdk";"$(BOOST_HOME)\";"$(OGRE_HOME)\OgreMain\include";"$(OGRE_HOME)\Dependencies\include";"$(OGRE_HOME)\Dependencies\include\ois";"$(OGRENEWT_HOME)\inc";.\include" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;OIS_DYNAMIC_LIB;" + RuntimeLibrary="2" + EnableFunctionLevelLinking="true" + UsePrecompiledHeader="0" + WarningLevel="3" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="newton.lib OgreMain.lib OIS.lib OgreNewt.lib" + OutputFile="$(OutDir)\release.exe" + LinkIncremental="1" + AdditionalLibraryDirectories=""$(OGRE_HOME)\lib";"$(OGRE_HOME)\Dependencies\lib\Release";"$(OGRENEWT_HOME)\lib";"$(NEWTON_HOME)\sdk\x32\dll_vs9"" + GenerateDebugInformation="true" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" + > + <File + RelativePath=".\source\Application.cpp" + > + </File> + <File + RelativePath=".\source\FirstPersonCameraController.cpp" + > + </File> + <File + RelativePath=".\source\main.cpp" + > + </File> + <File + RelativePath=".\source\MouseCursor.cpp" + > + </File> + <File + RelativePath=".\source\Picker.cpp" + > + </File> + <File + RelativePath=".\source\PrimitiveFactory.cpp" + > + </File> + <File + RelativePath=".\source\ScreenWriter.cpp" + > + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" + > + <File + RelativePath=".\include\Application.h" + > + </File> + <File + RelativePath=".\include\FirstPersonCameraController.h" + > + </File> + <File + RelativePath=".\include\MouseCursor.h" + > + </File> + <File + RelativePath=".\include\Picker.h" + > + </File> + <File + RelativePath=".\include\PrimitiveFactory.h" + > + </File> + <File + RelativePath=".\include\ScreenWriter.h" + > + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" + > + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Application.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Application.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Application.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,76 @@ +#ifndef APPLICATION_H +#define APPLICATION_H + +#include "MouseCursor.h" +#include "ScreenWriter.h" +#include "Picker.h" +#include "PrimitiveFactory.h" +#include "FirstPersonCameraController.h" + +#include <OgreRoot.h> +#include <OgreRenderWindow.h> +#include <OgreSceneManager.h> +#include <OgreCamera.h> +#include <OgreWindowEventUtilities.h> + +#include <OIS.h> + +#include <OgreNewt.h> +#include <OgreNewt_BasicFrameListener.h> + +class Application : public OIS::MouseListener, public OIS::KeyListener, public Ogre::WindowEventListener +{ +public: + Application(); + ~Application(); + + bool initialise(); + bool setup(); + void run(); + + bool mouseMoved(const OIS::MouseEvent &evt); + bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID); + bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID); + + bool keyPressed(const OIS::KeyEvent &evt); + bool keyReleased(const OIS::KeyEvent &evt); + + void windowMoved(Ogre::RenderWindow* rw) {}; + void windowFocusChange(Ogre::RenderWindow* rw) {}; + void windowResized(Ogre::RenderWindow* rw); + void windowClosed(Ogre::RenderWindow* rw); + +private: + Ogre::Root* ogre; + Ogre::RenderWindow* window; + Ogre::SceneManager* sceneManager; + Ogre::Camera* camera; + Ogre::Viewport* viewport; + + OIS::InputManager* ois; + OIS::Mouse* mouse; + OIS::Keyboard* keyboard; + + MouseCursor* cursor; + ScreenWriter* debug; + Picker* picker; + PrimitiveFactory* factory; + FirstPersonCameraController* firstPersonCameraController; + + OgreNewt::World* world; + OgreNewt::MaterialPair* defaultMaterialPair; + + int desiredPhysicsFramerate; + int lastFPS; + + unsigned long lastFrameTime; + unsigned long lastFrameDuration; + + Ogre::Real physicsTimeAccumulator; + Ogre::Real physicsUpdateStep; + + bool running; + bool debuggerActive; +}; + +#endif \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/FirstPersonCameraController.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/FirstPersonCameraController.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/FirstPersonCameraController.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,31 @@ +#ifndef FIRST_PERSON_CAMERA_CONTROLLER_H +#define FIRST_PERSON_CAMERA_CONTROLLER_H + +#include <OgreSceneManager.h> + +#include <OIS.h> + +class FirstPersonCameraController +{ +public: + FirstPersonCameraController(Ogre::SceneManager* sceneManager, Ogre::Real moveSpeed = 10.0f, Ogre::Real rotationSpeed = 0.25f); + void update(OIS::Keyboard* keyboard, OIS::Mouse* mouse, unsigned long lastFrameDuration); + void setPosition(Ogre::Vector3 position); + void getPositionOrientation(Ogre::Vector3& position, Ogre::Quaternion& orientation); + +private: + Ogre::SceneManager* sceneManager; + + Ogre::SceneNode* cameraNode; + Ogre::SceneNode* cameraYawNode; + Ogre::SceneNode* cameraPitchNode; + Ogre::SceneNode* cameraRollNode; + + Ogre::Vector3 cameraTranslation; + Ogre::Real cameraMoveSpeed; + Ogre::Degree cameraRotationSpeed; + Ogre::Radian cameraRotationX; + Ogre::Radian cameraRotationY; +}; + +#endif Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/MouseCursor.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/MouseCursor.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/MouseCursor.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,52 @@ +#ifndef MOUSECURSOR_H +#define MOUSECURSOR_H + +#include <OgrePanelOverlayElement.h> +#include <OgreTexture.h> +#include <OgreMaterialManager.h> +#include <OgreOverlayManager.h> + +class MouseCursor : public Ogre::Singleton<MouseCursor> +{ +public: + MouseCursor(); + ~MouseCursor(); + + struct Position + { + Position() { + X = 0; + Y = 0; + normalisedX = 0.0f; + normalisedY = 0.0f; + } + + int X; + int Y; + float normalisedX; + float normalisedY; + }; + + void setImage(const Ogre::String& filename); + void setWindowDimensions(unsigned int width, unsigned int height); + void setVisible(bool visible); + void updatePosition(int x, int y); + + Position getPosition() { return position; }; + + static MouseCursor& getSingleton(void); + static MouseCursor* getSingletonPtr(void); + +private: + Ogre::Real clamp(Ogre::Real a, Ogre::Real min, Ogre::Real max); + + Ogre::Overlay* guiOverlay; + Ogre::OverlayContainer* cursorContainer; + Ogre::TexturePtr texture; + Ogre::MaterialPtr material; + Ogre::Real windowWidth; + Ogre::Real windowHeight; + Position position; +}; + +#endif \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Picker.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Picker.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/Picker.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,47 @@ +#ifndef PICKER_H +#define PICKER_H + +#include <OgreNewt.h> +#include <OgreSceneManager.h> + +#include <OIS.h> + +class Picker : public Ogre::Singleton<Picker> +{ +public: + Picker(); + ~Picker(); + + void init(Ogre::SceneManager* sceneManager, OgreNewt::World* world, OIS::Keyboard* keyboard, OIS::Mouse* mouse, int maxDistance = 2000, int forceMultiplier = 10); + void deInit(); + void update(Ogre::Camera* camera); + + void dragCallback(OgreNewt::Body* body, Ogre::Real timeStep, int threadIndex); + + static Picker& getSingleton(void); + static Picker* getSingletonPtr(void); + +private: + Ogre::SceneManager* sceneManager; + Ogre::Camera* camera; + Ogre::SceneNode* dragLineNode; + Ogre::ManualObject* dragLineObject; + Ogre::Vector3 dragPoint; + Ogre::Real dragDist; + + OIS::Keyboard* keyboard; + OIS::Mouse* mouse; + + OgreNewt::World* world; + OgreNewt::Body* dragBody; + OgreNewt::Body::ForceCallback previousForceTorqueCallback; + + bool active; + bool dragging; + int maxDistance; + int forceMultiplier; + + void removeLine(); +}; + +#endif // PICKER_H Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/PrimitiveFactory.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/PrimitiveFactory.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/PrimitiveFactory.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,76 @@ +#ifndef PRIMITIVEFACTORY_H +#define PRIMITIVEFACTORY_H + +#include <OgreNewt.h> +#include <Ogre.h> + +#include <map> + +class PrimitiveFactory : public Ogre::Singleton<PrimitiveFactory> +{ +public: + PrimitiveFactory(OgreNewt::World* world, Ogre::SceneManager* sceneManager, Ogre::String defaultMaterialName = "Debug/Blue"); + ~PrimitiveFactory(); + + typedef std::map<Ogre::String, OgreNewt::Body*> BodyMap; + + OgreNewt::Body* createBox(Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, Ogre::String mesh = "box.mesh"); + OgreNewt::Body* createBox(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getBox(Ogre::String name); + + OgreNewt::Body* createEllipsoid(Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, Ogre::String mesh = "ellipsoid.mesh"); + OgreNewt::Body* createEllipsoid(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getEllipsoid(Ogre::String name); + + OgreNewt::Body* createCylinder(Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, float radius = 0.5f, float height = 1.0f, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, Ogre::String mesh = "cylinder.mesh"); + OgreNewt::Body* createCylinder(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getCylinder(Ogre::String name); + + OgreNewt::Body* createChamferCylinder(Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, float radius = 0.5f, float height = 1.0f, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, Ogre::String mesh = "chamfercylinder.mesh"); + OgreNewt::Body* createChamferCylinder(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getChamferCylinder(Ogre::String name); + + OgreNewt::Body* createCone(Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, float radius = 0.5f, float height = 1.0f, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, Ogre::String mesh = "cone.mesh"); + OgreNewt::Body* createCone(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getCone(Ogre::String name); + + OgreNewt::Body* createConvexHull(Ogre::String mesh, Ogre::String name = "", Ogre::String material = "", Ogre::Real mass = 1.0f, Ogre::Vector3 position = Ogre::Vector3::ZERO, Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* createConvexHull(Ogre::SceneNode* sourceNode, float mass = 1.0f, OgreNewt::MaterialID* materialId = NULL, int objectId = 0); + OgreNewt::Body* getConvexHull(Ogre::String name); + + OgreNewt::Body* createTreeCollision(Ogre::String mesh, Ogre::String name = "", Ogre::String material = "", Ogre::Vector3 position = Ogre::Vector3::ZERO, Ogre::Vector3 scale = Ogre::Vector3::UNIT_SCALE, Ogre::Quaternion orientation = Ogre::Quaternion::IDENTITY, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, bool optimize = true); + OgreNewt::Body* createTreeCollision(Ogre::SceneNode* sourceNode, OgreNewt::MaterialID* materialId = NULL, int objectId = 0, bool optimize = true); + OgreNewt::Body* getTreeCollision(Ogre::String name); + + BodyMap getBoxes() { return boxes; }; + BodyMap getEllipsoids() { return ellipsoids; }; + BodyMap getCylinders() { return cylinders; }; + BodyMap getChamferCylinders() { return chamferCylinders; }; + BodyMap getCones() { return chamferCylinders; }; + BodyMap getConvexHulls() { return convexHulls; }; + BodyMap getTreeCollisions() { return treeCollisions; }; + + OgreNewt::Body* getBody(Ogre::String name); + + static PrimitiveFactory& getSingleton(void); + static PrimitiveFactory* getSingletonPtr(void); + +private: + Ogre::SceneNode* createNode(Ogre::String mesh, Ogre::String name, Ogre::String material, Ogre::Vector3 position, Ogre::Vector3 scale, Ogre::Quaternion orientation); + + OgreNewt::World* world; + Ogre::SceneManager* sceneManager; + Ogre::String defaultMaterialName; + + int generatedObjectCount; + + BodyMap boxes; + BodyMap ellipsoids; + BodyMap cylinders; + BodyMap chamferCylinders; + BodyMap cones; + BodyMap convexHulls; + BodyMap treeCollisions; +}; + +#endif \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/ScreenWriter.h =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/ScreenWriter.h (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/include/ScreenWriter.h 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,77 @@ +#ifndef SCREEN_WRITER_H +#define SCREEN_WRITER_H + +#include <Ogre.h> +#include <OgreTextAreaOverlayElement.h> + +#include <string> +#include <map> + +class ScreenWriter : public Ogre::Singleton<ScreenWriter> +{ +public: + struct Entry + { + Entry() + { + x = 0; + y = 0; + size = 1.0f; + } + + float x; + float y; + float size; + + std::string text; + }; + + typedef std::vector<Entry> Strings; + + ScreenWriter(int windowWidth = 800, int windowHeight = 600); + ~ScreenWriter(); + + void init(); + void updateWindowExtents(int winWidth, int winHeight); + + void write(float x, float y, const char*, ...); + void write(float x, float y, Ogre::String, ...); + void write(float x, float y, float size, const char*, ...); + void write(Entry& entry); + + void begin(float x, float y, float size); + void write(const char*, ...); + + void removeVerticalAt(float x); + + void update(); + + static ScreenWriter& getSingleton(void); + static ScreenWriter* getSingletonPtr(void); + +private: + Strings texts; + + float defaultSize; + + int windowWidth; + int windowHeight; + + Ogre::Overlay* overlay; + Ogre::OverlayContainer* panel; + + enum { MAX_TEXT_AREAS = 50 }; + + Ogre::TextAreaOverlayElement* textAreas[MAX_TEXT_AREAS]; + + struct Context + { + Context(); + + float x; + float y; + float size; + } context; +}; + +#endif // SCREEN_WRITER_H Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/bluehigh.ttf =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/bluehigh.ttf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/consolas.ttf =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/consolas.ttf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/debug.fontdef =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/debug.fontdef (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/fonts/debug.fontdef 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,14 @@ +DebugText +{ + type truetype + source consolas.ttf + size 12 + resolution 72 +} +BlueHighway-10 +{ + type truetype + source bluehigh.ttf + size 32 + resolution 72 +} \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/gui/cursor.png =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/gui/cursor.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/scripts/debug.material =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/scripts/debug.material (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/materials/scripts/debug.material 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,41 @@ +material Debug/Blue +{ + technique + { + pass + { + ambient 0.25 0.35 0.45 + diffuse 0.25 0.35 0.45 + specular 0.45 0.45 0.45 10 + emissive 0 0 0 + } + } +} + +material Debug/Green +{ + technique + { + pass + { + ambient 0.309804 0.443137 0.243137 + diffuse 0.309804 0.443137 0.243137 + specular 0.45 0.45 0.45 10 + emissive 0 0 0 + } + } +} + +material Debug/Red +{ + technique + { + pass + { + ambient 0.439216 0.0392157 0.0392157 + diffuse 1 0 0 + specular 0.22549 0.22549 0.22549 10 + emissive 0 0 0 + } + } +} \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/meshes/sandbox.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/meshes/sandbox.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/box.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/box.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/chamfercylinder.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/chamfercylinder.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cone.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cone.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cylinder.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/cylinder.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/ellipsoid.mesh =================================================================== (Binary files differ) Property changes on: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/media/primitives/ellipsoid.mesh ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/Application.cpp =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/Application.cpp (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/Application.cpp 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,457 @@ +#include "Application.h" + +#include <OgreWindowEventUtilities.h> +#include <OgreEntity.h> +#include <OgreRenderSystem.h> + +Application::Application() +{ + // Make all the used pointers NULL + ogre = NULL; + window = NULL; + sceneManager = NULL; + camera = NULL; + viewport = NULL; + ois = NULL; + mouse = NULL; + keyboard = NULL; + cursor = NULL; + debug = NULL; + picker = NULL; + factory = NULL; + firstPersonCameraController = NULL; + world = NULL; + defaultMaterialPair = NULL; + + // Set desired framerate and variables used for stepping the physics + desiredPhysicsFramerate = 60; + lastFPS = 0; + lastFrameDuration = 0; + physicsUpdateStep = 1.0f / static_cast<float>(desiredPhysicsFramerate); + physicsTimeAccumulator = 0.0f; + + // Application is not yet running and debugger is not activated by default + running = false; + debuggerActive = false; +} + +Application::~Application() +{ + // Clean everything up in reverse order these were created + if (defaultMaterialPair) + { + delete defaultMaterialPair; + defaultMaterialPair = NULL; + } + + if (factory) + { + delete factory; + factory = NULL; + } + + if (picker) + { + delete picker; + picker = NULL; + } + + if (world) + { + world->getDebugger().deInit(); + + delete world; + world = NULL; + } + + if (firstPersonCameraController) + { + delete firstPersonCameraController; + firstPersonCameraController = NULL; + } + + if (debug) + { + delete debug; + debug = NULL; + } + + if (cursor) + { + delete cursor; + cursor = NULL; + } + + if (mouse) + { + ois->destroyInputObject(mouse); + mouse = NULL; + } + + if (keyboard) + { + ois->destroyInputObject(keyboard); + keyboard = NULL; + } + + if (ois) + { + ois->destroyInputObject(mouse); + mouse = NULL; + + ois->destroyInputObject(keyboard); + keyboard = NULL; + + OIS::InputManager::destroyInputSystem(ois); + ois = NULL; + } + + if (ogre) + { + delete ogre; + ogre = NULL; + } +} + +bool Application::initialise() +{ + // Initialise Ogre and load plugins based on debug mode + ogre = new Ogre::Root("", "ogre.cfg", "ogre.log"); + +#ifdef _DEBUG + ogre->loadPlugin("RenderSystem_Direct3D9_d"); + ogre->loadPlugin("RenderSystem_GL_d"); + ogre->loadPlugin("Plugin_CgProgramManager_d"); +#else + ogre->loadPlugin("RenderSystem_Direct3D9"); + ogre->loadPlugin("RenderSystem_GL"); + ogre->loadPlugin("Plugin_CgProgramManager"); +#endif; + + // Show the configuration dialog, exit if user cancels + if (!ogre->showConfigDialog()) + { + return false; + } + + // Initialise Ogre and start listening window events + window = ogre->initialise(true, "OgreNewt Minimal Application"); + Ogre::WindowEventUtilities::addWindowEventListener(window, this); + + // Add used resource groups + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/gui", "FileSystem", "General"); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/materials/scripts", "FileSystem", "General"); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/fonts", "FileSystem", "General"); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/primitives", "FileSystem", "General"); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/meshes", "FileSystem", "General"); + + // Initialise the resource groups + Ogre::ResourceGroupManager::getSingleton().initialiseResourceGroup("General"); + + // Create a generic scene manager + sceneManager = ogre->createSceneManager(Ogre::ST_GENERIC); + + // Create a camera + camera = sceneManager->createCamera("camera"); + camera->setNearClipDistance(0.1f); + camera->setFarClipDistance(250.0f); + + // Create a first person camera controller + firstPersonCameraController = new FirstPersonCameraController(sceneManager); + + // Add main viewport and set its background colour + viewport = window->addViewport(camera); + viewport->setBackgroundColour(Ogre::ColourValue(0.5f, 0.5f, 0.5f)); + + // Set camera aspect ratio based on viewport size + camera->setAspectRatio(Ogre::Real(viewport->getActualWidth()) / Ogre::Real(viewport->getActualHeight())); + + // Get window handle, needed for OIS + unsigned long windowHandle; + window->getCustomAttribute("WINDOW", &windowHandle); + + // Feed OIS window handle needed to capture events + OIS::ParamList oisParameters; + oisParameters.insert(OIS::ParamList::value_type("WINDOW", Ogre::StringConverter::toString(windowHandle))); + + // Create an OIS input system + ois = OIS::InputManager::createInputSystem(oisParameters); + + // Create mouse and keyboard, joystick can be made in the same manner + mouse = static_cast<OIS::Mouse*>(ois->createInputObject(OIS::OISMouse, true)); + keyboard = static_cast<OIS::Keyboard*>(ois->createInputObject(OIS::OISKeyboard, true)); + + // Start listening for mouse and keyboard events + mouse->setEventCallback(this); + keyboard->setEventCallback(this); + + // Create a custom mouse cursor that uses Ogre overlays + cursor = new MouseCursor(); + cursor->setImage("cursor.png"); + cursor->setWindowDimensions(window->getWidth(), window->getHeight()); + cursor->setVisible(true); + + // Create and initialize a debug screenwriter, that enables writing simple text on screen + debug = new ScreenWriter(viewport->getActualWidth(), viewport->getActualHeight()); + debug->init(); + + // Tell mouse the size of out window + const OIS::MouseState& mouseState = mouse->getMouseState(); + mouseState.width = window->getWidth(); + mouseState.height = window->getHeight(); + + // Create a new OgreNewt physics world and set some basic configuration options, initialise debugger + world = new OgreNewt::World(); + world->setWorldSize(Ogre::Vector3(-250, -250, -250), Ogre::Vector3(250, 250, 250)); + world->setSolverModel(1); + world->setThreadCount(1); + world->getDebugger().init(sceneManager); + + // Create a new picker, hold down CTRL to use it + picker = new Picker(); + picker->init(sceneManager, world, keyboard, mouse, 250, 10); + + // Create a primitive factory, use singleton to access it later + factory = new PrimitiveFactory(world, sceneManager); + + // Create default material pair + const OgreNewt::MaterialID* defaultMaterialId = world->getDefaultMaterialID(); + defaultMaterialPair = new OgreNewt::MaterialPair(world, defaultMaterialId, defaultMaterialId); + + // Set default material settings + defaultMaterialPair->setDefaultElasticity(0.4f); + defaultMaterialPair->setDefaultSoftness(0.05f); + defaultMaterialPair->setDefaultFriction(0.9f, 0.6f); + defaultMaterialPair->setDefaultCollidable(1); + defaultMaterialPair->setContinuousCollisionMode(0); + + // Write some help info on the screen + debug->write(-280, 20, "F1 - Toggle debug display"); + debug->write(-280, 36, "Hold CTRL - Show cursor and pick"); + debug->write(-280, 52, "Hold SHIFT - Move faster"); + debug->write(-280, 68, "Hold SHIFT - Move faster"); + debug->write(-280, 84, "SPACE - Throw a sphere"); + + return true; +} + +bool Application::setup() +{ + // Set the ammount and colour of ambient light in the scene + sceneManager->setAmbientLight(Ogre::ColourValue(0.35f, 0.35f, 0.35f)); + + // Set camera position + firstPersonCameraController->setPosition(Ogre::Vector3(0, 2, 20)); + + // Create a point-light + Ogre::Light* light = sceneManager->createLight("Light"); + light->setType(Ogre::Light::LT_POINT); + light->setPosition(Ogre::Vector3(100, 150, 100)); + + // Create a body out of an Ogre node + Ogre::Entity* entity = sceneManager->createEntity("Cylinder", "cylinder.mesh"); + entity->setMaterialName("Debug/Red"); + Ogre::SceneNode* node = sceneManager->getRootSceneNode()->createChildSceneNode("Cylinder"); + node->attachObject(entity); + node->setScale(Ogre::Vector3(12, 1, 5)); + node->setPosition(Ogre::Vector3(0, 0.5f, 0)); + PrimitiveFactory::getSingleton().createCylinder(node, 100); + + // Create static tree-collision using the factory + OgreNewt::Body* sandbox = PrimitiveFactory::getSingleton().createTreeCollision("sandbox.mesh", "sandbox", "Debug/Green", Ogre::Vector3::ZERO, Ogre::Vector3::UNIT_SCALE, Ogre::Quaternion::IDENTITY, NULL, 0, false); + + for (int x = 0; x < 10; x++) + { + for (int y = 0; y < 10; y++) + { + // Create some boxes using the factory + PrimitiveFactory::getSingleton().createBox("", (((x % 2 == 0) ^ (y % 2 == 0)) ? "Debug/Blue" : "Debug/Red"), 1.0f, Ogre::Vector3(x - 4.5f, y + 1.5f, 0.0f)); + } + } + + + // Create a body manually + entity = sceneManager->createEntity("Ellipsoid", "ellipsoid.mesh"); + entity->setMaterialName("Debug/Blue"); + entity->setCastShadows(true); + node = sceneManager->getRootSceneNode()->createChildSceneNode("Ellipsoid"); + node->attachObject(entity); + node->setScale(Ogre::Vector3(5, 5, 5)); + + OgreNewt::ConvexCollisionPtr collision = OgreNewt::ConvexCollisionPtr(new OgreNewt::CollisionPrimitives::Ellipsoid(world, node->getScale() / 2, 1)); + OgreNewt::Body* body = new OgreNewt::Body(world, collision); + body->attachNode(node); + body->setPositionOrientation(Ogre::Vector3(0.0f, 5.0f, -10.0f), Ogre::Quaternion::IDENTITY); + + Ogre::Vector3 inertia, centerOfMass; + collision->calculateInertialMatrix(inertia, centerOfMass); + body->setMassMatrix(1.0f, inertia * 1.0f); + body->setCenterOfMass(centerOfMass); + body->setStandardForceCallback(); + + return true; +} + +void Application::run() +{ + // Mark the application running + running = true; + + while (running) + { + // Pump window messages for nice behaviour + Ogre::WindowEventUtilities::messagePump(); + + // Capture input + mouse->capture(); + keyboard->capture(); + + // Get frame rendertime in milliseconds + unsigned long currentFrameTime = ogre->getTimer()->getMilliseconds(); + lastFrameDuration = currentFrameTime - lastFrameTime; + lastFrameTime = currentFrameTime; + + // Add last frame duration to accumulator that uses seconds + physicsTimeAccumulator += lastFrameDuration / 1000.0f; + + // Check whether there is any reason to step the physics + if (physicsTimeAccumulator > physicsUpdateStep) + { + // Lets make maximum of 5 physics updates + if (physicsTimeAccumulator < physicsUpdateStep * 5) + { + while (physicsTimeAccumulator >= physicsUpdateStep) + { + // Update the physics world and substract from the accumulator + world->update(physicsUpdateStep); + physicsTimeAccumulator -= physicsUpdateStep; + } + } + else + { + // Too many steps, just update once and clear accumulator to prevent total slowdown + world->update(physicsTimeAccumulator); + physicsTimeAccumulator = 0.0f; + } + } + + // Check whether CTRL is being held down + if (keyboard->isKeyDown(OIS::KC_LCONTROL) || keyboard->isKeyDown(OIS::KC_RCONTROL)) + { + // If so, make the cursor visible and enable picking + cursor->setVisible(true); + picker->update(camera); + } + else + { + // Hide the cursor and update first person camera + cursor->setVisible(false); + + firstPersonCameraController->update(keyboard, mouse, lastFrameDuration); + + Ogre::Vector3 newCameraPosition; + Ogre::Quaternion newCameraOrientation; + + firstPersonCameraController->getPositionOrientation(newCameraPosition, newCameraOrientation); + + camera->setPosition(newCameraPosition); + camera->setOrientation(newCameraOrientation); + } + + if (debuggerActive) + { + // Show the debug display if active (F1 to toggle) + world->getDebugger().showDebugInformation(); + } + + // Write current FPS + debug->write(20, 20, "FPS: " + Ogre::StringConverter::toString(window->getStatistics().lastFPS)); + + // Update the screenwriter + debug->update(); + + // Render a frame + ogre->renderOneFrame(); + } +} + +bool Application::mouseMoved(const OIS::MouseEvent &evt) +{ + if(cursor != NULL) + { + // Update cursor position + cursor->updatePosition(evt.state.X.abs, evt.state.Y.abs); + } + + return true; +} + +bool Application::mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID) +{ + return true; +} + +bool Application::mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID) +{ + return true; +} + +bool Application::keyPressed(const OIS::KeyEvent &evt) +{ + return true; +} + +bool Application::keyReleased(const OIS::KeyEvent &evt) +{ + if (evt.key == OIS::KC_ESCAPE) + { + // Request shutdown + running = false; + } + else if (evt.key == OIS::KC_F1) + { + // Toggle debug display + if (debuggerActive) + { + debuggerActive = false; + world->getDebugger().hideDebugInformation(); + } + else + { + debuggerActive = true; + } + } + else if (evt.key == OIS::KC_SPACE) + { + // Make a sphere and add impulse in the direction of the camera + OgreNewt::Body* ball = PrimitiveFactory::getSingleton().createEllipsoid(); + ball->setPositionOrientation(camera->getPosition(), camera->getOrientation()); + ball->setContinuousCollisionMode(1); + ball->addImpulse(camera->getDirection() * 100.0f, camera->getPosition()); + } + + return true; +} + +void Application::windowResized(Ogre::RenderWindow* rw) +{ + if (mouse) + { + // Notify OIS of new window size + const OIS::MouseState& mouseState = mouse->getMouseState(); + mouseState.width = rw->getWidth(); + mouseState.height = rw->getHeight(); + } + + if (cursor) + { + // Also notify the cursor + cursor->setWindowDimensions(rw->getWidth(), rw->getHeight()); + } +} + +void Application::windowClosed(Ogre::RenderWindow* rw) +{ + // Request shutdown when renderwindow is closed + running = false; +} \ No newline at end of file Added: branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/FirstPersonCameraController.cpp =================================================================== --- branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/FirstPersonCameraController.cpp (rev 0) +++ branches/ogrenewt/newton20/demos/MinimalOgreNewtApplication/source/FirstPersonCameraController.cpp 2009-12-26 16:15:26 UTC (rev 2770) @@ -0,0 +1,127 @@ +#include "FirstPersonCameraController.h" + +FirstPersonCameraController::FirstPersonCameraController(Ogre::SceneManager* sceneManager, Ogre::Real moveSpeed, Ogre::Real rotationSpeed) +{ + this->sceneManager = sceneManager; + + cameraNode = sceneManager->getRootSceneNode()->createChildSceneNode(); + cameraYawNode = cameraNode->createChildSceneNode(); + cameraPitchNode = cameraYawNode->createChildSceneNode(); + cameraRollNode = cameraPitchNode->createChildSceneNode(); + + cameraTranslation = Ogre::Vector3::ZERO; + cameraMoveSpeed = moveSpeed; + cameraRotationSpeed = Ogre::Degree(rotationSpeed); + cameraRotationX = 0.0; + cameraRotationY = 0.0; +} + +void FirstPersonCameraController::update(OIS::Keyboard* keyboard, OIS::Mouse* mouse, unsigned long lastFrameDuration) +{ + cameraTranslation = Ogre::Vector3::ZERO; + Ogre::Real realCameraMoveSpeed = cameraMoveSpeed * ((float)lastFrameDuration / 1000.0f); + + if(keyboard->isKeyDown(OIS::KC_LSHIFT)) + { + realCameraMoveSpeed *= 10.0; + } + + if(keyboard->isKeyDown(OIS::KC_RSHIFT)) + { + realCameraMoveSpeed *= 10.0; + } + + if(keyboard->isKeyDown(OIS::KC_PGUP)) + { + cameraTranslation.y += realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_PGDOWN)) + { + cameraTranslation.y -= realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_W)) + { + cameraTranslation.z -= realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_S)) + { + cameraTranslation.z += realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_A)) + { + cameraTranslation.x -= realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_D)) + { + cameraTranslation.x += realCameraMoveSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_Q)) + { + cameraRotationX += cameraRotationSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_E)) + { + cameraRotationX -= cameraRotationSpeed; + } + + if(keyboard->isKeyDown(OIS::KC_O)) + { + cameraRotationX = 0; + cameraRotationY = 0; + } + + const OIS::MouseState &ms = mouse->getMouseState(); + + if(ms.buttonDown(OIS::MB_Right)) + { + cameraTranslation.x += ms.X.rel * realCameraMoveSpeed; + cameraTranslation.y -= ms.Y.rel * realCameraMoveSpeed; + } + else + { + cameraRotationX = Ogre::Degree(-ms.X.rel * cameraRotationSpeed); + cameraRotationY = Ogre::Degree(-ms.Y.rel * cameraRotationSpeed); + } + + Ogre::Real pitchAngle; + Ogre::Real pitchAngleSign; + + cameraYawNode->yaw(cameraRotationX); + cameraPitchNode->pitch(cameraRotationY); + + cameraNode->translate(cameraYawNode->getOrientation() * cameraPitchNode->getOrientation() * cameraTranslation, Ogre::SceneNode::TS_LOCAL); + + pitchAngle = (2 * Ogre::Degree(Ogre::Math::ACos(cameraPitchNode->getOrientation().w)).valueDegrees()); + + pitchAngleSign = cameraPitchNode->getOrientation().x; + + if(pitchAngle > 90.0f) + { + if(pitchAngleSign > 0) + { + cameraPitchNode->setOrientation(Ogre::Quaternion(Ogre::Math::Sqrt(0.5f), Ogre::Math::Sqrt(0.5f), 0, 0)); + } + else if (pitchAngleSign < 0) + { + cameraPitchNode->setOrientation(Ogre::Quaternion(Ogre::Math::Sqrt(0.5f), -Ogre::Math::Sqrt(0.5f), 0, 0)); + } + } +} + +void FirstPersonCameraController::setPosition(Ogre::Vector3 position) +{ + cameraNode->setPosition(position); +} + +void FirstPersonCameraController::getPositionOrientation(Ogre::Vector3& position, Ogre::Quaternion& o... [truncated message content] |