From 959831f4ef5a3e797f576c3de08cd65032c997ad Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sun, 13 Jan 2013 18:54:10 +1000 Subject: Remove damned ancient DOS line endings from Irrlicht. Hopefully I did not go overboard. --- .../examples/23.SMeshHandling/Makefile | 76 +- .../examples/23.SMeshHandling/SMeshHandling.dev | 118 +-- .../examples/23.SMeshHandling/SMeshHandling.vcproj | 264 +++---- .../23.SMeshHandling/SMeshHandling_vc10.vcxproj | 374 ++++----- .../23.SMeshHandling/SMeshHandling_vc11.vcxproj | 382 ++++----- .../23.SMeshHandling/SMeshHandling_vc8.vcproj | 380 ++++----- .../23.SMeshHandling/SMeshHandling_vc9.vcproj | 374 ++++----- .../examples/23.SMeshHandling/main.cpp | 852 ++++++++++----------- 8 files changed, 1410 insertions(+), 1410 deletions(-) (limited to 'libraries/irrlicht-1.8/examples/23.SMeshHandling') diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/Makefile b/libraries/irrlicht-1.8/examples/23.SMeshHandling/Makefile index eab5060..49901ed 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/Makefile +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/Makefile @@ -1,38 +1,38 @@ -# Makefile for Irrlicht Examples -# It's usually sufficient to change just the target name and source file list -# and be sure that CXX is set to a valid compiler -Target = 23.SMeshHandling -Sources = main.cpp - -# general compiler settings -CPPFLAGS = -I../../include -I/usr/X11R6/include -CXXFLAGS = -O3 -ffast-math -#CXXFLAGS = -g -Wall - -#default target is Linux -all: all_linux - -ifeq ($(HOSTTYPE), x86_64) -LIBSELECT=64 -endif - -# target specific settings -all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -lXcursor -all_linux clean_linux: SYSTEM=Linux -all_win32: LDFLAGS = -L../../lib/Win32-gcc -lIrrlicht -lopengl32 -lm -all_win32 clean_win32: SYSTEM=Win32-gcc -all_win32 clean_win32: SUF=.exe -# name of the binary - only valid for targets which set SYSTEM -DESTPATH = ../../bin/$(SYSTEM)/$(Target)$(SUF) - -all_linux all_win32: - $(warning Building...) - $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS) - -clean: clean_linux clean_win32 - $(warning Cleaning...) - -clean_linux clean_win32: - @$(RM) $(DESTPATH) - -.PHONY: all all_win32 clean clean_linux clean_win32 +# Makefile for Irrlicht Examples +# It's usually sufficient to change just the target name and source file list +# and be sure that CXX is set to a valid compiler +Target = 23.SMeshHandling +Sources = main.cpp + +# general compiler settings +CPPFLAGS = -I../../include -I/usr/X11R6/include +CXXFLAGS = -O3 -ffast-math +#CXXFLAGS = -g -Wall + +#default target is Linux +all: all_linux + +ifeq ($(HOSTTYPE), x86_64) +LIBSELECT=64 +endif + +# target specific settings +all_linux: LDFLAGS = -L/usr/X11R6/lib$(LIBSELECT) -L../../lib/Linux -lIrrlicht -lGL -lXxf86vm -lXext -lX11 -lXcursor +all_linux clean_linux: SYSTEM=Linux +all_win32: LDFLAGS = -L../../lib/Win32-gcc -lIrrlicht -lopengl32 -lm +all_win32 clean_win32: SYSTEM=Win32-gcc +all_win32 clean_win32: SUF=.exe +# name of the binary - only valid for targets which set SYSTEM +DESTPATH = ../../bin/$(SYSTEM)/$(Target)$(SUF) + +all_linux all_win32: + $(warning Building...) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS) + +clean: clean_linux clean_win32 + $(warning Cleaning...) + +clean_linux clean_win32: + @$(RM) $(DESTPATH) + +.PHONY: all all_win32 clean clean_linux clean_win32 diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.dev b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.dev index 94043f3..f07bec2 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.dev +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.dev @@ -1,59 +1,59 @@ -[Project] -FileName=example.dev -Name=Irrlicht Example 23 SMeshHandling -UnitCount=1 -Type=1 -Ver=1 -ObjFiles= -Includes=..\..\include -Libs= -PrivateResource= -ResourceIncludes= -MakeIncludes= -Compiler= -CppCompiler= -Linker=../../lib/Win32-gcc/libIrrlicht.a_@@_ -IsCpp=1 -Icon= -ExeOutput=../../bin/Win32-gcc -ObjectOutput=obj -OverrideOutput=1 -OverrideOutputName=23.SMeshHandling.exe -HostApplication= -Folders= -CommandLine= -IncludeVersionInfo=0 -SupportXPThemes=0 -CompilerSet=0 -CompilerSettings=0000000000000000000000 -UseCustomMakefile=0 -CustomMakefile= - -[Unit1] -FileName=main.cpp -CompileCpp=1 -Folder=Projekt1 -Compile=1 -Link=1 -Priority=1000 -OverrideBuildCmd=0 -BuildCmd= - -[VersionInfo] -Major=0 -Minor=1 -Release=1 -Build=1 -LanguageID=1033 -CharsetID=1252 -CompanyName= -FileVersion= -FileDescription=Irrlicht Engine example compiled using DevCpp and gcc -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion= -AutoIncBuildNr=0 - +[Project] +FileName=example.dev +Name=Irrlicht Example 23 SMeshHandling +UnitCount=1 +Type=1 +Ver=1 +ObjFiles= +Includes=..\..\include +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker=../../lib/Win32-gcc/libIrrlicht.a_@@_ +IsCpp=1 +Icon= +ExeOutput=../../bin/Win32-gcc +ObjectOutput=obj +OverrideOutput=1 +OverrideOutputName=23.SMeshHandling.exe +HostApplication= +Folders= +CommandLine= +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=0 +CompilerSettings=0000000000000000000000 +UseCustomMakefile=0 +CustomMakefile= + +[Unit1] +FileName=main.cpp +CompileCpp=1 +Folder=Projekt1 +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[VersionInfo] +Major=0 +Minor=1 +Release=1 +Build=1 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Irrlicht Engine example compiled using DevCpp and gcc +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 + diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.vcproj b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.vcproj index a63d583..83d82f2 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.vcproj +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling.vcproj @@ -1,132 +1,132 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc10.vcxproj b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc10.vcxproj index 51a6f9e..cad7367 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc10.vcxproj +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc10.vcxproj @@ -1,188 +1,188 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - 23.SMeshHandling - {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7} - 23.SMeshHandling - Win32Proj - - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - Application - MultiByte - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\bin\Win32-VisualStudio\ - ..\..\bin\Win64-VisualStudio\ - true - true - ..\..\bin\Win32-VisualStudio\ - ..\..\bin\Win64-VisualStudio\ - false - false - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - - - - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) - true - $(OutDir)SMeshHandling.pdb - Console - - - - - - - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) - true - $(OutDir)SMeshHandling.pdb - Console - - - - - - - true - Speed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - - - Level3 - - - Cdecl - - - ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) - false - Console - true - true - - - - - - - true - Speed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - - - Level3 - - - Cdecl - - - ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) - false - Console - true - true - - - - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 23.SMeshHandling + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7} + 23.SMeshHandling + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + \ No newline at end of file diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc11.vcxproj b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc11.vcxproj index 7f2a781..b71a7fa 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc11.vcxproj +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc11.vcxproj @@ -1,192 +1,192 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - 23.SMeshHandling - {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7} - 23.SMeshHandling - Win32Proj - - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - Application - MultiByte - v110 - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\bin\Win32-VisualStudio\ - ..\..\bin\Win64-VisualStudio\ - true - true - ..\..\bin\Win32-VisualStudio\ - ..\..\bin\Win64-VisualStudio\ - false - false - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - - - - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - - - Level3 - EditAndContinue - - - ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) - true - $(OutDir)SMeshHandling.pdb - Console - - - - - - - Disabled - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - Level3 - ProgramDatabase - - - ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) - true - $(OutDir)SMeshHandling.pdb - Console - - - - - - - true - Speed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - - - Level3 - - - Cdecl - - - ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) - false - Console - true - true - - - - - - - true - Speed - ..\..\include;%(AdditionalIncludeDirectories) - WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - - - Level3 - - - Cdecl - - - ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe - ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) - false - Console - true - true - - - - - - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + 23.SMeshHandling + {6AEC2AA2-C9FF-4B7D-B07A-94A9D34B41D7} + 23.SMeshHandling + Win32Proj + + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + true + true + ..\..\bin\Win32-VisualStudio\ + ..\..\bin\Win64-VisualStudio\ + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + Disabled + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + true + $(OutDir)SMeshHandling.pdb + Console + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win32-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + true + Speed + ..\..\include;%(AdditionalIncludeDirectories) + WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + Sync + + + Level3 + + + Cdecl + + + ..\..\bin\Win64-VisualStudio\23.SMeshHandling.exe + ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories) + false + Console + true + true + + + + + + + + + + \ No newline at end of file diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc8.vcproj b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc8.vcproj index ecc9135..6f20965 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc8.vcproj +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc8.vcproj @@ -1,190 +1,190 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc9.vcproj b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc9.vcproj index b1b921e..e8f55df 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc9.vcproj +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/SMeshHandling_vc9.vcproj @@ -1,187 +1,187 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/irrlicht-1.8/examples/23.SMeshHandling/main.cpp b/libraries/irrlicht-1.8/examples/23.SMeshHandling/main.cpp index c3c2ccf..d36fb24 100644 --- a/libraries/irrlicht-1.8/examples/23.SMeshHandling/main.cpp +++ b/libraries/irrlicht-1.8/examples/23.SMeshHandling/main.cpp @@ -1,426 +1,426 @@ -/** Example 023 SMeshBufferHandling - -A tutorial by geoff. - -In this tutorial we'll learn how to create custom meshes and deal with them -with Irrlicht. We'll create an interesting heightmap with some lighting effects. -With keys 1,2,3 you can choose a different mesh layout, which is put into the -mesh buffers as desired. All positions, normals, etc. are updated accordingly. - -Ok, let's start with the headers (I think there's nothing to say about it) -*/ - -#include -#include "driverChoice.h" - -#ifdef _MSC_VER -#pragma comment(lib, "Irrlicht.lib") -#endif - -//Namespaces for the engine -using namespace irr; -using namespace video; -using namespace core; -using namespace scene; -using namespace io; -using namespace gui; - -/* This is the type of the functions which work out the colour. */ -typedef SColor colour_func(f32 x, f32 y, f32 z); - -/* Here comes a set of functions which can be used for coloring the nodes while -creating the mesh. */ - -// Greyscale, based on the height. -SColor grey(f32, f32, f32 z) -{ - u32 n = (u32)(255.f * z); - return SColor(255, n, n, n); -} - -// Interpolation between blue and white, with red added in one -// direction and green in the other. -SColor yellow(f32 x, f32 y, f32) -{ - return SColor(255, 128 + (u32)(127.f * x), 128 + (u32)(127.f * y), 255); -} - -// Pure white. -SColor white(f32, f32, f32) { return SColor(255, 255, 255, 255); } - -/* The type of the functions which generate the heightmap. x and y -range between -0.5 and 0.5, and s is the scale of the heightmap. */ - -typedef f32 generate_func(s16 x, s16 y, f32 s); - -// An interesting sample function :-) -f32 eggbox(s16 x, s16 y, f32 s) -{ - const f32 r = 4.f*sqrtf((f32)(x*x + y*y))/s; - const f32 z = expf(-r * 2) * (cosf(0.2f * x) + cosf(0.2f * y)); - return 0.25f+0.25f*z; -} - -// A rather dumb sine function :-/ -f32 moresine(s16 x, s16 y, f32 s) -{ - const f32 xx=0.3f*(f32)x/s; - const f32 yy=12*y/s; - const f32 z = sinf(xx*xx+yy)*sinf(xx+yy*yy); - return 0.25f + 0.25f * z; -} - -// A simple function -f32 justexp(s16 x, s16 y, f32 s) -{ - const f32 xx=6*x/s; - const f32 yy=6*y/s; - const f32 z = (xx*xx+yy*yy); - return 0.3f*z*cosf(xx*yy); -} - -/* A simple class for representing heightmaps. Most of this should be obvious. */ - -class HeightMap -{ -private: - const u16 Width; - const u16 Height; - f32 s; - core::array data; -public: - HeightMap(u16 _w, u16 _h) : Width(_w), Height(_h), s(0.f), data(0) - { - s = sqrtf((f32)(Width * Width + Height * Height)); - data.set_used(Width * Height); - } - - // Fill the heightmap with values generated from f. - void generate(generate_func f) - { - u32 i=0; - for(u16 y = 0; y < Height; ++y) - for(u16 x = 0; x < Width; ++x) - set(i++, calc(f, x, y)); - } - - u16 height() const { return Height; } - u16 width() const { return Width; } - - f32 calc(generate_func f, u16 x, u16 y) const - { - const f32 xx = (f32)x - Width*0.5f; - const f32 yy = (f32)y - Height*0.5f; - return f((u16)xx, (u16)yy, s); - } - - // The height at (x, y) is at position y * Width + x. - - void set(u16 x, u16 y, f32 z) { data[y * Width + x] = z; } - void set(u32 i, f32 z) { data[i] = z; } - f32 get(u16 x, u16 y) const { return data[y * Width + x]; } - - /* The only difficult part. This considers the normal at (x, y) to - be the cross product of the vectors between the adjacent points - in the horizontal and vertical directions. - - s is a scaling factor, which is necessary if the height units are - different from the coordinate units; for example, if your map has - heights in metres and the coordinates are in units of a - kilometer. */ - - vector3df getnormal(u16 x, u16 y, f32 s) const - { - const f32 zc = get(x, y); - f32 zl, zr, zu, zd; - - if (x == 0) - { - zr = get(x + 1, y); - zl = zc + zc - zr; - } - else if (x == Width - 1) - { - zl = get(x - 1, y); - zr = zc + zc - zl; - } - else - { - zr = get(x + 1, y); - zl = get(x - 1, y); - } - - if (y == 0) - { - zd = get(x, y + 1); - zu = zc + zc - zd; - } - else if (y == Height - 1) - { - zu = get(x, y - 1); - zd = zc + zc - zu; - } - else - { - zd = get(x, y + 1); - zu = get(x, y - 1); - } - - return vector3df(s * 2 * (zl - zr), 4, s * 2 * (zd - zu)).normalize(); - } -}; - -/* A class which generates a mesh from a heightmap. */ -class TMesh -{ -private: - u16 Width; - u16 Height; - f32 Scale; -public: - SMesh* Mesh; - - TMesh() : Mesh(0), Width(0), Height(0), Scale(1.f) - { - Mesh = new SMesh(); - } - - ~TMesh() - { - Mesh->drop(); - } - - // Unless the heightmap is small, it won't all fit into a single - // SMeshBuffer. This function chops it into pieces and generates a - // buffer from each one. - - void init(const HeightMap &hm, f32 scale, colour_func cf, IVideoDriver *driver) - { - Scale = scale; - - const u32 mp = driver -> getMaximalPrimitiveCount(); - Width = hm.width(); - Height = hm.height(); - - const u32 sw = mp / (6 * Height); // the width of each piece - - u32 i=0; - for(u32 y0 = 0; y0 < Height; y0 += sw) - { - u16 y1 = y0 + sw; - if (y1 >= Height) - y1 = Height - 1; // the last one might be narrower - addstrip(hm, cf, y0, y1, i); - ++i; - } - if (igetMeshBufferCount()) - { - // clear the rest - for (u32 j=i; jgetMeshBufferCount(); ++j) - { - Mesh->getMeshBuffer(j)->drop(); - } - Mesh->MeshBuffers.erase(i,Mesh->getMeshBufferCount()-i); - } - // set dirty flag to make sure that hardware copies of this - // buffer are also updated, see IMesh::setHardwareMappingHint - Mesh->setDirty(); - Mesh->recalculateBoundingBox(); - } - - // Generate a SMeshBuffer which represents all the vertices and - // indices for values of y between y0 and y1, and add it to the - // mesh. - - void addstrip(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum) - { - SMeshBuffer *buf = 0; - if (bufNumgetMeshBufferCount()) - { - buf = (SMeshBuffer*)Mesh->getMeshBuffer(bufNum); - } - else - { - // create new buffer - buf = new SMeshBuffer(); - Mesh->addMeshBuffer(buf); - // to simplify things we drop here but continue using buf - buf->drop(); - } - buf->Vertices.set_used((1 + y1 - y0) * Width); - - u32 i=0; - for (u16 y = y0; y <= y1; ++y) - { - for (u16 x = 0; x < Width; ++x) - { - const f32 z = hm.get(x, y); - const f32 xx = (f32)x/(f32)Width; - const f32 yy = (f32)y/(f32)Height; - - S3DVertex& v = buf->Vertices[i++]; - v.Pos.set(x, Scale * z, y); - v.Normal.set(hm.getnormal(x, y, Scale)); - v.Color=cf(xx, yy, z); - v.TCoords.set(xx, yy); - } - } - - buf->Indices.set_used(6 * (Width - 1) * (y1 - y0)); - i=0; - for(u16 y = y0; y < y1; ++y) - { - for(u16 x = 0; x < Width - 1; ++x) - { - const u16 n = (y-y0) * Width + x; - buf->Indices[i]=n; - buf->Indices[++i]=n + Width; - buf->Indices[++i]=n + Width + 1; - buf->Indices[++i]=n + Width + 1; - buf->Indices[++i]=n + 1; - buf->Indices[++i]=n; - ++i; - } - } - - buf->recalculateBoundingBox(); - } -}; - -/* -Our event receiver implementation, taken from tutorial 4. -*/ -class MyEventReceiver : public IEventReceiver -{ -public: - // This is the one method that we have to implement - virtual bool OnEvent(const SEvent& event) - { - // Remember whether each key is down or up - if (event.EventType == irr::EET_KEY_INPUT_EVENT) - KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown; - - return false; - } - - // This is used to check whether a key is being held down - virtual bool IsKeyDown(EKEY_CODE keyCode) const - { - return KeyIsDown[keyCode]; - } - - MyEventReceiver() - { - for (u32 i=0; igetVideoDriver(); - ISceneManager *smgr = device->getSceneManager(); - device->setWindowCaption(L"Irrlicht Example for SMesh usage."); - - /* - Create the custom mesh and initialize with a heightmap - */ - TMesh mesh; - HeightMap hm = HeightMap(255, 255); - hm.generate(eggbox); - mesh.init(hm, 50.f, grey, driver); - - // Add the mesh to the scene graph - IMeshSceneNode* meshnode = smgr -> addMeshSceneNode(mesh.Mesh); - meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, false); - - // light is just for nice effects - ILightSceneNode *node = smgr->addLightSceneNode(0, vector3df(0,100,0), - SColorf(1.0f, 0.6f, 0.7f, 1.0f), 500.0f); - if (node) - { - node->getLightData().Attenuation.set(0.f, 1.f/500.f, 0.f); - ISceneNodeAnimator* anim = smgr->createFlyCircleAnimator(vector3df(0,150,0),250.0f); - if (anim) - { - node->addAnimator(anim); - anim->drop(); - } - } - - ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(); - if (camera) - { - camera->setPosition(vector3df(-20.f, 150.f, -20.f)); - camera->setTarget(vector3df(200.f, -80.f, 150.f)); - camera->setFarValue(20000.0f); - } - - /* - Just a usual render loop with event handling. The custom mesh is - a usual part of the scene graph which gets rendered by drawAll. - */ - while(device->run()) - { - if(!device->isWindowActive()) - { - device->sleep(100); - continue; - } - - if(receiver.IsKeyDown(irr::KEY_KEY_W)) - { - meshnode->setMaterialFlag(video::EMF_WIREFRAME, !meshnode->getMaterial(0).Wireframe); - } - else if(receiver.IsKeyDown(irr::KEY_KEY_1)) - { - hm.generate(eggbox); - mesh.init(hm, 50.f, grey, driver); - } - else if(receiver.IsKeyDown(irr::KEY_KEY_2)) - { - hm.generate(moresine); - mesh.init(hm, 50.f, yellow, driver); - } - else if(receiver.IsKeyDown(irr::KEY_KEY_3)) - { - hm.generate(justexp); - mesh.init(hm, 50.f, yellow, driver); - } - - driver->beginScene(true, true, SColor(0xff000000)); - smgr->drawAll(); - driver->endScene(); - } - - device->drop(); - - return 0; -} - -/* -That's it! Just compile and play around with the program. -**/ +/** Example 023 SMeshBufferHandling + +A tutorial by geoff. + +In this tutorial we'll learn how to create custom meshes and deal with them +with Irrlicht. We'll create an interesting heightmap with some lighting effects. +With keys 1,2,3 you can choose a different mesh layout, which is put into the +mesh buffers as desired. All positions, normals, etc. are updated accordingly. + +Ok, let's start with the headers (I think there's nothing to say about it) +*/ + +#include +#include "driverChoice.h" + +#ifdef _MSC_VER +#pragma comment(lib, "Irrlicht.lib") +#endif + +//Namespaces for the engine +using namespace irr; +using namespace video; +using namespace core; +using namespace scene; +using namespace io; +using namespace gui; + +/* This is the type of the functions which work out the colour. */ +typedef SColor colour_func(f32 x, f32 y, f32 z); + +/* Here comes a set of functions which can be used for coloring the nodes while +creating the mesh. */ + +// Greyscale, based on the height. +SColor grey(f32, f32, f32 z) +{ + u32 n = (u32)(255.f * z); + return SColor(255, n, n, n); +} + +// Interpolation between blue and white, with red added in one +// direction and green in the other. +SColor yellow(f32 x, f32 y, f32) +{ + return SColor(255, 128 + (u32)(127.f * x), 128 + (u32)(127.f * y), 255); +} + +// Pure white. +SColor white(f32, f32, f32) { return SColor(255, 255, 255, 255); } + +/* The type of the functions which generate the heightmap. x and y +range between -0.5 and 0.5, and s is the scale of the heightmap. */ + +typedef f32 generate_func(s16 x, s16 y, f32 s); + +// An interesting sample function :-) +f32 eggbox(s16 x, s16 y, f32 s) +{ + const f32 r = 4.f*sqrtf((f32)(x*x + y*y))/s; + const f32 z = expf(-r * 2) * (cosf(0.2f * x) + cosf(0.2f * y)); + return 0.25f+0.25f*z; +} + +// A rather dumb sine function :-/ +f32 moresine(s16 x, s16 y, f32 s) +{ + const f32 xx=0.3f*(f32)x/s; + const f32 yy=12*y/s; + const f32 z = sinf(xx*xx+yy)*sinf(xx+yy*yy); + return 0.25f + 0.25f * z; +} + +// A simple function +f32 justexp(s16 x, s16 y, f32 s) +{ + const f32 xx=6*x/s; + const f32 yy=6*y/s; + const f32 z = (xx*xx+yy*yy); + return 0.3f*z*cosf(xx*yy); +} + +/* A simple class for representing heightmaps. Most of this should be obvious. */ + +class HeightMap +{ +private: + const u16 Width; + const u16 Height; + f32 s; + core::array data; +public: + HeightMap(u16 _w, u16 _h) : Width(_w), Height(_h), s(0.f), data(0) + { + s = sqrtf((f32)(Width * Width + Height * Height)); + data.set_used(Width * Height); + } + + // Fill the heightmap with values generated from f. + void generate(generate_func f) + { + u32 i=0; + for(u16 y = 0; y < Height; ++y) + for(u16 x = 0; x < Width; ++x) + set(i++, calc(f, x, y)); + } + + u16 height() const { return Height; } + u16 width() const { return Width; } + + f32 calc(generate_func f, u16 x, u16 y) const + { + const f32 xx = (f32)x - Width*0.5f; + const f32 yy = (f32)y - Height*0.5f; + return f((u16)xx, (u16)yy, s); + } + + // The height at (x, y) is at position y * Width + x. + + void set(u16 x, u16 y, f32 z) { data[y * Width + x] = z; } + void set(u32 i, f32 z) { data[i] = z; } + f32 get(u16 x, u16 y) const { return data[y * Width + x]; } + + /* The only difficult part. This considers the normal at (x, y) to + be the cross product of the vectors between the adjacent points + in the horizontal and vertical directions. + + s is a scaling factor, which is necessary if the height units are + different from the coordinate units; for example, if your map has + heights in metres and the coordinates are in units of a + kilometer. */ + + vector3df getnormal(u16 x, u16 y, f32 s) const + { + const f32 zc = get(x, y); + f32 zl, zr, zu, zd; + + if (x == 0) + { + zr = get(x + 1, y); + zl = zc + zc - zr; + } + else if (x == Width - 1) + { + zl = get(x - 1, y); + zr = zc + zc - zl; + } + else + { + zr = get(x + 1, y); + zl = get(x - 1, y); + } + + if (y == 0) + { + zd = get(x, y + 1); + zu = zc + zc - zd; + } + else if (y == Height - 1) + { + zu = get(x, y - 1); + zd = zc + zc - zu; + } + else + { + zd = get(x, y + 1); + zu = get(x, y - 1); + } + + return vector3df(s * 2 * (zl - zr), 4, s * 2 * (zd - zu)).normalize(); + } +}; + +/* A class which generates a mesh from a heightmap. */ +class TMesh +{ +private: + u16 Width; + u16 Height; + f32 Scale; +public: + SMesh* Mesh; + + TMesh() : Mesh(0), Width(0), Height(0), Scale(1.f) + { + Mesh = new SMesh(); + } + + ~TMesh() + { + Mesh->drop(); + } + + // Unless the heightmap is small, it won't all fit into a single + // SMeshBuffer. This function chops it into pieces and generates a + // buffer from each one. + + void init(const HeightMap &hm, f32 scale, colour_func cf, IVideoDriver *driver) + { + Scale = scale; + + const u32 mp = driver -> getMaximalPrimitiveCount(); + Width = hm.width(); + Height = hm.height(); + + const u32 sw = mp / (6 * Height); // the width of each piece + + u32 i=0; + for(u32 y0 = 0; y0 < Height; y0 += sw) + { + u16 y1 = y0 + sw; + if (y1 >= Height) + y1 = Height - 1; // the last one might be narrower + addstrip(hm, cf, y0, y1, i); + ++i; + } + if (igetMeshBufferCount()) + { + // clear the rest + for (u32 j=i; jgetMeshBufferCount(); ++j) + { + Mesh->getMeshBuffer(j)->drop(); + } + Mesh->MeshBuffers.erase(i,Mesh->getMeshBufferCount()-i); + } + // set dirty flag to make sure that hardware copies of this + // buffer are also updated, see IMesh::setHardwareMappingHint + Mesh->setDirty(); + Mesh->recalculateBoundingBox(); + } + + // Generate a SMeshBuffer which represents all the vertices and + // indices for values of y between y0 and y1, and add it to the + // mesh. + + void addstrip(const HeightMap &hm, colour_func cf, u16 y0, u16 y1, u32 bufNum) + { + SMeshBuffer *buf = 0; + if (bufNumgetMeshBufferCount()) + { + buf = (SMeshBuffer*)Mesh->getMeshBuffer(bufNum); + } + else + { + // create new buffer + buf = new SMeshBuffer(); + Mesh->addMeshBuffer(buf); + // to simplify things we drop here but continue using buf + buf->drop(); + } + buf->Vertices.set_used((1 + y1 - y0) * Width); + + u32 i=0; + for (u16 y = y0; y <= y1; ++y) + { + for (u16 x = 0; x < Width; ++x) + { + const f32 z = hm.get(x, y); + const f32 xx = (f32)x/(f32)Width; + const f32 yy = (f32)y/(f32)Height; + + S3DVertex& v = buf->Vertices[i++]; + v.Pos.set(x, Scale * z, y); + v.Normal.set(hm.getnormal(x, y, Scale)); + v.Color=cf(xx, yy, z); + v.TCoords.set(xx, yy); + } + } + + buf->Indices.set_used(6 * (Width - 1) * (y1 - y0)); + i=0; + for(u16 y = y0; y < y1; ++y) + { + for(u16 x = 0; x < Width - 1; ++x) + { + const u16 n = (y-y0) * Width + x; + buf->Indices[i]=n; + buf->Indices[++i]=n + Width; + buf->Indices[++i]=n + Width + 1; + buf->Indices[++i]=n + Width + 1; + buf->Indices[++i]=n + 1; + buf->Indices[++i]=n; + ++i; + } + } + + buf->recalculateBoundingBox(); + } +}; + +/* +Our event receiver implementation, taken from tutorial 4. +*/ +class MyEventReceiver : public IEventReceiver +{ +public: + // This is the one method that we have to implement + virtual bool OnEvent(const SEvent& event) + { + // Remember whether each key is down or up + if (event.EventType == irr::EET_KEY_INPUT_EVENT) + KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown; + + return false; + } + + // This is used to check whether a key is being held down + virtual bool IsKeyDown(EKEY_CODE keyCode) const + { + return KeyIsDown[keyCode]; + } + + MyEventReceiver() + { + for (u32 i=0; igetVideoDriver(); + ISceneManager *smgr = device->getSceneManager(); + device->setWindowCaption(L"Irrlicht Example for SMesh usage."); + + /* + Create the custom mesh and initialize with a heightmap + */ + TMesh mesh; + HeightMap hm = HeightMap(255, 255); + hm.generate(eggbox); + mesh.init(hm, 50.f, grey, driver); + + // Add the mesh to the scene graph + IMeshSceneNode* meshnode = smgr -> addMeshSceneNode(mesh.Mesh); + meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, false); + + // light is just for nice effects + ILightSceneNode *node = smgr->addLightSceneNode(0, vector3df(0,100,0), + SColorf(1.0f, 0.6f, 0.7f, 1.0f), 500.0f); + if (node) + { + node->getLightData().Attenuation.set(0.f, 1.f/500.f, 0.f); + ISceneNodeAnimator* anim = smgr->createFlyCircleAnimator(vector3df(0,150,0),250.0f); + if (anim) + { + node->addAnimator(anim); + anim->drop(); + } + } + + ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(); + if (camera) + { + camera->setPosition(vector3df(-20.f, 150.f, -20.f)); + camera->setTarget(vector3df(200.f, -80.f, 150.f)); + camera->setFarValue(20000.0f); + } + + /* + Just a usual render loop with event handling. The custom mesh is + a usual part of the scene graph which gets rendered by drawAll. + */ + while(device->run()) + { + if(!device->isWindowActive()) + { + device->sleep(100); + continue; + } + + if(receiver.IsKeyDown(irr::KEY_KEY_W)) + { + meshnode->setMaterialFlag(video::EMF_WIREFRAME, !meshnode->getMaterial(0).Wireframe); + } + else if(receiver.IsKeyDown(irr::KEY_KEY_1)) + { + hm.generate(eggbox); + mesh.init(hm, 50.f, grey, driver); + } + else if(receiver.IsKeyDown(irr::KEY_KEY_2)) + { + hm.generate(moresine); + mesh.init(hm, 50.f, yellow, driver); + } + else if(receiver.IsKeyDown(irr::KEY_KEY_3)) + { + hm.generate(justexp); + mesh.init(hm, 50.f, yellow, driver); + } + + driver->beginScene(true, true, SColor(0xff000000)); + smgr->drawAll(); + driver->endScene(); + } + + device->drop(); + + return 0; +} + +/* +That's it! Just compile and play around with the program. +**/ -- cgit v1.1