Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
nomad-lab
VR-demos
Commits
59e526de
Commit
59e526de
authored
Feb 21, 2017
by
Ruben Jesus Garcia Hernandez
Browse files
Viewer for timestep data such as molecular dynamics
parent
4c1e5d87
Changes
11
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
59e526de
This repository contains the demos for HTC vive using openvr version 0.9.19
https://github.com/ValveSoftware/openvr
Clone that repository and add the content of this one inside the samples directory.
List of directories
TimestepData:
Loads prepared molecular dynamics simulations
TimestepData/NOMADViveT.rc
0 → 100644
View file @
59e526de
TimestepData/hellovr_opengl.sln
0 → 100644
View file @
59e526de
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2012 for Windows Desktop
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NOMADViveT", "hellovr_opengl.vcxproj", "{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Debug|Win32.ActiveCfg = Debug|Win32
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Debug|Win32.Build.0 = Debug|Win32
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Debug|x64.ActiveCfg = Debug|x64
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Debug|x64.Build.0 = Debug|x64
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Release|Win32.ActiveCfg = Release|Win32
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Release|Win32.Build.0 = Release|Win32
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Release|x64.ActiveCfg = Release|x64
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
TimestepData/hellovr_opengl.vcxproj
0 → 100644
View file @
59e526de
<?xml version="1.0" encoding="utf-8"?>
<Project
DefaultTargets=
"Build"
ToolsVersion=
"12.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup
Label=
"ProjectConfigurations"
>
<ProjectConfiguration
Include=
"Debug|Win32"
>
<Configuration>
Debug
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Debug|x64"
>
<Configuration>
Debug
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|Win32"
>
<Configuration>
Release
</Configuration>
<Platform>
Win32
</Platform>
</ProjectConfiguration>
<ProjectConfiguration
Include=
"Release|x64"
>
<Configuration>
Release
</Configuration>
<Platform>
x64
</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup
Label=
"Globals"
>
<ProjectGuid>
{FF19F6AE-67E0-4585-9D4A-038CB6E8DD09}
</ProjectGuid>
<Keyword>
Win32Proj
</Keyword>
<RootNamespace>
hellovr_opengl
</RootNamespace>
<ProjectName>
NOMADViveT
</ProjectName>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.Default.props"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
Application
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<CharacterSet>
Unicode
</CharacterSet>
<PlatformToolset>
v120
</PlatformToolset>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
Label=
"Configuration"
>
<ConfigurationType>
Application
</ConfigurationType>
<UseDebugLibraries>
true
</UseDebugLibraries>
<CharacterSet>
Unicode
</CharacterSet>
<PlatformToolset>
v120
</PlatformToolset>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
Label=
"Configuration"
>
<ConfigurationType>
Application
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
<PlatformToolset>
v120
</PlatformToolset>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
Label=
"Configuration"
>
<ConfigurationType>
Application
</ConfigurationType>
<UseDebugLibraries>
false
</UseDebugLibraries>
<WholeProgramOptimization>
true
</WholeProgramOptimization>
<CharacterSet>
Unicode
</CharacterSet>
<PlatformToolset>
v110
</PlatformToolset>
</PropertyGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.props"
/>
<ImportGroup
Label=
"ExtensionSettings"
>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
Label=
"PropertySheets"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Label=
"PropertySheets"
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<ImportGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
Label=
"PropertySheets"
>
<Import
Project=
"$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"
Condition=
"exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')"
Label=
"LocalAppDataPlatform"
/>
</ImportGroup>
<PropertyGroup
Label=
"UserMacros"
/>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<LinkIncremental>
true
</LinkIncremental>
<OutDir>
..\bin\win32\
</OutDir>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<LinkIncremental>
true
</LinkIncremental>
<OutDir>
$(SolutionDir)..\bin\win64
</OutDir>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<LinkIncremental>
false
</LinkIncremental>
<OutDir>
..\bin\win32\
</OutDir>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<LinkIncremental>
false
</LinkIncremental>
<OutDir>
$(SolutionDir)\..\bin\win64
</OutDir>
</PropertyGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|Win32'"
>
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>
Level3
</WarningLevel>
<Optimization>
Disabled
</Optimization>
<PreprocessorDefinitions>
WIN32;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<AdditionalIncludeDirectories>
..;../../headers;../thirdparty/glew/glew-1.11.0/include;../thirdparty/sdl2-2.0.3/include
</AdditionalIncludeDirectories>
<RuntimeLibrary>
MultiThreadedDebug
</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<AdditionalDependencies>
openvr_api.lib;glew32.lib;SDL2.lib;SDL2main.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<AdditionalLibraryDirectories>
..\thirdparty\glew\glew-1.11.0\lib\Release\Win32;..\thirdparty\sdl2-2.0.3\bin\win32;..\..\lib\win32;%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
<LargeAddressAware>
true
</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>
Level3
</WarningLevel>
<Optimization>
Disabled
</Optimization>
<PreprocessorDefinitions>
WIN32;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<AdditionalIncludeDirectories>
..;../../headers;../thirdparty/glew/glew-1.11.0/include;../thirdparty/sdl2-2.0.3/include
</AdditionalIncludeDirectories>
<RuntimeLibrary>
MultiThreadedDebug
</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<AdditionalDependencies>
openvr_api.lib;glew32.lib;SDL2.lib;SDL2main.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<AdditionalLibraryDirectories>
..\thirdparty\glew\glew-1.11.0\lib\Release\x64;..\thirdparty\sdl2-2.0.3\bin\win64;..\..\lib\win64;%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
<LargeAddressAware>
true
</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|Win32'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>
MaxSpeed
</Optimization>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<PreprocessorDefinitions>
WIN32;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<RuntimeLibrary>
MultiThreaded
</RuntimeLibrary>
<AdditionalIncludeDirectories>
..;../../headers;../thirdparty/glew/glew-1.11.0/include;../thirdparty/sdl2-2.0.3/include
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<AdditionalDependencies>
openvr_api.lib;glew32.lib;SDL2.lib;SDL2main.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<AdditionalLibraryDirectories>
..\thirdparty\glew\glew-1.11.0\lib\Release\Win32;..\thirdparty\sdl2-2.0.3\bin\win32;..\..\lib\win32;%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
<LargeAddressAware>
true
</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>
MaxSpeed
</Optimization>
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<PreprocessorDefinitions>
WIN32;_CRT_NONSTDC_NO_DEPRECATE;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<RuntimeLibrary>
MultiThreadedDLL
</RuntimeLibrary>
<AdditionalIncludeDirectories>
..;../../headers;../thirdparty/glew/glew-1.11.0/include;..\thirdparty\sdl2-2.0.3\include
</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>
Windows
</SubSystem>
<GenerateDebugInformation>
true
</GenerateDebugInformation>
<EnableCOMDATFolding>
true
</EnableCOMDATFolding>
<OptimizeReferences>
true
</OptimizeReferences>
<AdditionalDependencies>
openvr_api.lib;glew32.lib;SDL2.lib;SDL2main.lib;glu32.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
</AdditionalDependencies>
<AdditionalLibraryDirectories>
..\thirdparty\glew\glew-1.11.0\lib\Release\x64;H:\Temp\SDL2-2.0.3-vs2013-64\Release;..\..\lib\win64;..\thirdparty\sdl2-2.0.3\bin\win64;%(AdditionalLibraryDirectories)
</AdditionalLibraryDirectories>
<LargeAddressAware>
true
</LargeAddressAware>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile
Include=
"..\shared\lodepng.cpp"
/>
<ClCompile
Include=
"..\shared\Matrices.cpp"
/>
<ClCompile
Include=
"..\shared\pathtools.cpp"
/>
<ClCompile
Include=
"hellovr_opengl_main.cpp"
/>
<ClCompile
Include=
"rply.c"
/>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"..\shared\lodepng.h"
/>
<ClInclude
Include=
"..\shared\Matrices.h"
/>
<ClInclude
Include=
"..\shared\pathtools.h"
/>
<ClInclude
Include=
"..\shared\Vectors.h"
/>
</ItemGroup>
<ItemGroup>
<ResourceCompile
Include=
"NOMADViveT.rc"
/>
</ItemGroup>
<Import
Project=
"$(VCTargetsPath)\Microsoft.Cpp.targets"
/>
<ImportGroup
Label=
"ExtensionTargets"
>
</ImportGroup>
</Project>
\ No newline at end of file
TimestepData/hellovr_opengl.vcxproj.filters
0 → 100644
View file @
59e526de
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<ItemGroup>
<Filter
Include=
"Source Files"
>
<UniqueIdentifier>
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}
</UniqueIdentifier>
<Extensions>
cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
</Extensions>
</Filter>
<Filter
Include=
"Header Files"
>
<UniqueIdentifier>
{93995380-89BD-4b04-88EB-625FBE52EBFB}
</UniqueIdentifier>
<Extensions>
h;hpp;hxx;hm;inl;inc;xsd
</Extensions>
</Filter>
<Filter
Include=
"Resource Files"
>
<UniqueIdentifier>
{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
</UniqueIdentifier>
<Extensions>
rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
</Extensions>
</Filter>
<Filter
Include=
"Link Libraries"
>
<UniqueIdentifier>
{23064a78-3bcb-49ae-8c90-ed419518885d}
</UniqueIdentifier>
</Filter>
<Filter
Include=
"Shared"
>
<UniqueIdentifier>
{8cca1fa3-575c-4e0f-acae-7d4d800be358}
</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile
Include=
"hellovr_opengl_main.cpp"
>
<Filter>
Source Files
</Filter>
</ClCompile>
<ClCompile
Include=
"..\shared\lodepng.cpp"
>
<Filter>
Shared
</Filter>
</ClCompile>
<ClCompile
Include=
"..\shared\Matrices.cpp"
>
<Filter>
Shared
</Filter>
</ClCompile>
<ClCompile
Include=
"..\shared\pathtools.cpp"
>
<Filter>
Shared
</Filter>
</ClCompile>
<ClCompile
Include=
"rply.c"
>
<Filter>
Source Files
</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude
Include=
"..\shared\lodepng.h"
>
<Filter>
Shared
</Filter>
</ClInclude>
<ClInclude
Include=
"..\shared\Matrices.h"
>
<Filter>
Shared
</Filter>
</ClInclude>
<ClInclude
Include=
"..\shared\Vectors.h"
>
<Filter>
Shared
</Filter>
</ClInclude>
<ClInclude
Include=
"..\shared\pathtools.h"
>
<Filter>
Shared
</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile
Include=
"NOMADViveT.rc"
>
<Filter>
Resource Files
</Filter>
</ResourceCompile>
</ItemGroup>
</Project>
\ No newline at end of file
TimestepData/hellovr_opengl.vcxproj.user
0 → 100644
View file @
59e526de
<?xml version="1.0" encoding="utf-8"?>
<Project
ToolsVersion=
"4.0"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Release|x64'"
>
<LocalDebuggerCommandArguments>
C:\Users\mobile\Desktop\openvrDemos\win64\CO2-CaO-Rel.txt
</LocalDebuggerCommandArguments>
<DebuggerFlavor>
WindowsLocalDebugger
</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x64'"
>
<LocalDebuggerCommandArguments>
Y:\v2t\software\openvr\NOMAD-bin\CO2-CaO.txt
</LocalDebuggerCommandArguments>
<DebuggerFlavor>
WindowsLocalDebugger
</DebuggerFlavor>
</PropertyGroup>
</Project>
\ No newline at end of file
TimestepData/hellovr_opengl_main.cpp
0 → 100644
View file @
59e526de
//========= Copyright Valve Corporation ============//
/*#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
*/
#include
<SDL.h>
#include
<GL/glew.h>
#include
<SDL_opengl.h>
#include
<gl/glu.h>
#include
<stdio.h>
#include
<string>
#include
<cstdlib>
#include
<openvr.h>
#include
"shared/lodepng.h"
#include
"shared/Matrices.h"
#include
"shared/pathtools.h"
#include
"rply.h"
static
int
vertex_cb
(
p_ply_argument
argument
);
static
int
face_cb
(
p_ply_argument
argument
);
static
float
*
CubeVertices
;
static
int
*
CubeIndices
;
static
int
CurrentVertex
;
static
int
CurrentIndex
;
static
float
BACKGROUND
[
3
];
static
const
char
*
PATH
;
static
int
ISOS
;
static
int
TIMESTEPS
;
static
float
**
isocolours
;
// [ISOS][4];
const
char
**
plyfiles
;
static
float
**
translations
;
static
float
userpos
[
3
];
//#define LOCALTEST
/*#ifdef LOCALTEST
#define PATH "Y:\\v2t\\datasets\\mpcdf_CO2_CaO\\cubes-bigger\\IsosurfacesFixed\\"
#else
#define PATH "data\\CO2-CaO-B\\"
//#define PATH "C:\\Users\\mobile\\Desktop\\openvrDemos\\win64\\data\\CO2-CaO-B\\"
#endif
*/
#define ZLAYERS 12
//number of components in our vertices data xyz+nxnynz+rgba
#define numComponents 10
#define MAXGPU 300
//use 32 or 16 bits for index (in case more than 64k vertices / mesh
#define INDICESGL32
//isosurfaces (or meshes such as atoms etc)
//#define ISOS 5
//shown on https://www.vbw-bayern.de/vbw/Aktionsfelder/Innovation-F-T/Forschung-und-Technologie/Zukunft-digital-Big-Data.jsp
#define GRID 1
#define GRIDSTR "1"
#define NUMLODS 1
/*#ifndef LOCALTEST
#define TIMESTEPS 423
#else
#define TIMESTEPS 1
#endif*/
#define NUMPLY (TIMESTEPS * ISOS)
//http://stackoverflow.com/questions/3018313/algorithm-to-convert-rgb-to-hsv-and-hsv-to-rgb-in-range-0-255-for-both
void
hsv2rgb
(
float
*
hsv
,
float
*
rgb
)
{
float
h
=
hsv
[
0
],
s
=
hsv
[
1
],
v
=
hsv
[
2
],
p
,
q
,
t
,
f
,
r
,
g
,
b
;
(
h
==
360.
)
?
(
h
=
0.
)
:
(
h
/=
60.
);
f
=
h
-
floor
(
h
);
p
=
v
*
(
1.
f
-
s
);
q
=
v
*
(
1.
f
-
s
*
f
);
t
=
v
*
(
1.
f
-
s
*
(
1.
f
-
f
));
if
(
0.
<=
h
&&
h
<
1.
){
r
=
v
;
g
=
t
;
b
=
p
;
}
else
if
(
1.
<=
h
&&
h
<
2.
)
{
r
=
q
;
g
=
v
;
b
=
p
;
}
else
if
(
2.
<=
h
&&
h
<
3.
){
r
=
p
;
g
=
v
;
b
=
t
;
}
else
if
(
3.
<=
h
&&
h
<
4.
){
r
=
p
;
g
=
q
;
b
=
v
;
}
else
if
(
4.
<=
h
&&
h
<
5.
){
r
=
t
;
g
=
p
;
b
=
v
;
}
else
if
(
5.
<=
h
&&
h
<
6.
){
r
=
v
;
g
=
p
;
b
=
q
;
}
else
{
r
=
0.
;
g
=
0.
;
b
=
0.
;
}
rgb
[
0
]
=
r
;
rgb
[
1
]
=
g
;
rgb
[
2
]
=
b
;
}
class
CGLRenderModel
{
public:
CGLRenderModel
(
const
std
::
string
&
sRenderModelName
);
~
CGLRenderModel
();
bool
BInit
(
const
vr
::
RenderModel_t
&
vrModel
,
const
vr
::
RenderModel_TextureMap_t
&
vrDiffuseTexture
);
void
Cleanup
();
void
Draw
();
const
std
::
string
&
GetName
()
const
{
return
m_sModelName
;
}
private:
GLuint
m_glVertBuffer
;
GLuint
m_glIndexBuffer
;
GLuint
m_glVertArray
;
GLuint
m_glTexture
;
GLsizei
m_unVertexCount
;
std
::
string
m_sModelName
;
};
static
bool
g_bPrintf
=
true
;
//-----------------------------------------------------------------------------
// Purpose:
//------------------------------------------------------------------------------
class
CMainApplication
{
public:
CMainApplication
(
int
argc
,
char
*
argv
[]);
virtual
~
CMainApplication
();
bool
BInit
();
bool
BInitGL
();
bool
BInitCompositor
();
void
SetupRenderModels
();
void
Shutdown
();
void
RunMainLoop
();
bool
HandleInput
();
void
ProcessVREvent
(
const
vr
::
VREvent_t
&
event
);
void
RenderFrame
();
bool
SetupTexturemaps
();
bool
SetupDepthPeeling
();
void
SetupScene
();
bool
AddModelToScene
(
Matrix4
mat
,
std
::
vector
<
float
>
&
vertdata
,
#ifndef INDICESGL32
std
::
vector
<
short
>
&
vertindices
,
#else
std
::
vector
<
GLuint
>
&
vertindices
,
#endif
const
char
*
const
data
,
bool
water
,
bool
colours
,
int
set
);
void
DrawControllers
();
bool
SetupStereoRenderTargets
();
void
SetupDistortion
();
void
SetupCameras
();
void
RenderStereoTargets
();
void
RenderDistortion
();
void
RenderScene
(
vr
::
Hmd_Eye
nEye
);
Matrix4
GetHMDMatrixProjectionEye
(
vr
::
Hmd_Eye
nEye
);
Matrix4
GetHMDMatrixPoseEye
(
vr
::
Hmd_Eye
nEye
);
Matrix4
GetCurrentViewProjectionMatrix
(
vr
::
Hmd_Eye
nEye
);
void
UpdateHMDMatrixPose
();
Matrix4
ConvertSteamVRMatrixToMatrix4
(
const
vr
::
HmdMatrix34_t
&
matPose
);
GLuint
CompileGLShader
(
const
char
*
pchShaderName
,
const
char
*
pchVertexShader
,
const
char
*
pchFragmentShader
);
bool
CreateAllShaders
();
void
SetupRenderModelForTrackedDevice
(
vr
::
TrackedDeviceIndex_t
unTrackedDeviceIndex
);
CGLRenderModel
*
FindOrLoadRenderModel
(
const
char
*
pchRenderModelName
);
void
RenderAllTrackedRenderModels
(
vr
::
Hmd_Eye
nEye
);
private:
bool
m_bDebugOpenGL
;
bool
m_bVerbose
;
bool
m_bPerf
;
bool
m_bVblank
;
bool
m_bGlFinishHack
;
vr
::
IVRSystem
*
m_pHMD
;
vr
::
IVRRenderModels
*
m_pRenderModels
;
std
::
string
m_strDriver
;
std
::
string
m_strDisplay
;
vr
::
TrackedDevicePose_t
m_rTrackedDevicePose
[
vr
::
k_unMaxTrackedDeviceCount
];
Matrix4
m_rmat4DevicePose
[
vr
::
k_unMaxTrackedDeviceCount
];
bool
m_rbShowTrackedDevice
[
vr
::
k_unMaxTrackedDeviceCount
];
std
::
vector
<
float
>
**
vertdataarray
;
//[LOD][PLY]
#ifndef INDICESGL32
std
::
vector
<
short
>
**
vertindicesarray
;
//[LOD][PLY]
#else
std
::
vector
<
GLuint
>
**
vertindicesarray
;
//[LOD][PLY]
#endif
private:
// SDL bookkeeping
SDL_Window
*
m_pWindow
;
uint32_t
m_nWindowWidth
;
uint32_t
m_nWindowHeight
;
SDL_GLContext
m_pContext
;
void
PaintGrid
(
const
vr
::
Hmd_Eye
&
nEye
,
const
int
iso
);
private:
// OpenGL bookkeeping
int
m_iTrackedControllerCount
;
int
m_iTrackedControllerCount_Last
;
int
m_iValidPoseCount
;
int
m_iValidPoseCount_Last
;
bool
m_bShowCubes
;
bool
buttonPressed
[
2
][
vr
::
k_unMaxTrackedDeviceCount
];
//grip, application menu
std
::
string
m_strPoseClasses
;
// what classes we saw poses for this frame
char
m_rDevClassChar
[
vr
::
k_unMaxTrackedDeviceCount
];
// for each device, a character representing its class
int
m_iSceneVolumeWidth
;
int
m_iSceneVolumeHeight
;
int
m_iSceneVolumeDepth
;
float
m_fScaleSpacing
;
float
m_fScale
;
int
m_iSceneVolumeInit
;
// if you want something other than the default 20x20x20
float
m_fNearClip
;
float
m_fFarClip
;
GLuint
*
m_iTexture
;
//[3+ZLAYERS];
GLuint
peelingFramebuffer
;
unsigned
int
**
m_uiVertcount
;
// [LODS][NUMPLY];
GLuint
**
m_glSceneVertBuffer
;
// [LODS][NUMPLY];
GLuint
**
m_unSceneVAO
;
//[LODS][NUMPLY];
GLuint
**
m_unSceneVAOIndices
;
//[LODS][NUMPLY];
int
currentset
;
float
elapsedtime
;
static
const
float
videospeed
;
int
currentiso
;
int
firstdevice
;
GLuint
m_unLensVAO
;
GLuint
m_glIDVertBuffer
;
GLuint
m_glIDIndexBuffer
;
unsigned
int
m_uiIndexSize
;
GLuint
m_glControllerVertBuffer
;
GLuint
m_unControllerVAO
;
unsigned
int
m_uiControllerVertcount
;
Matrix4
m_mat4HMDPose
;
Matrix4
m_mat4eyePosLeft
;
Matrix4
m_mat4eyePosRight
;
Matrix4
m_mat4ProjectionCenter
;
Matrix4
m_mat4ProjectionLeft
;
Matrix4
m_mat4ProjectionRight
;
Vector3
UserPosition
;
struct
VertexDataScene
{
Vector3
position
;
Vector2
texCoord
;
};
struct
VertexDataLens
{
Vector2
position
;
Vector2
texCoordRed
;
Vector2
texCoordGreen
;
Vector2
texCoordBlue
;
};
GLuint
m_unSceneProgramID
;
GLuint
m_unLensProgramID
;
GLuint
m_unControllerTransformProgramID
;
GLuint
m_unRenderModelProgramID
;
GLint
m_nSceneMatrixLocation
;
GLint
m_nBlendingIntLocation
;
GLint
m_nControllerMatrixLocation
;
GLint
m_nRenderModelMatrixLocation
;
struct
FramebufferDesc
{
GLuint
m_nDepthBufferId
;
GLuint
m_nRenderTextureId
;
GLuint
m_nRenderFramebufferId
;
GLuint
m_nResolveTextureId
;
GLuint
m_nResolveFramebufferId
;
};
FramebufferDesc
leftEyeDesc
;
FramebufferDesc
rightEyeDesc
;
bool
CreateFrameBuffer
(
int
nWidth
,
int
nHeight
,
FramebufferDesc
&
framebufferDesc
);
uint32_t
m_nRenderWidth
;
uint32_t
m_nRenderHeight
;
std
::
vector
<
CGLRenderModel
*
>
m_vecRenderModels
;
CGLRenderModel
*
m_rTrackedDeviceToRenderModel
[
vr
::
k_unMaxTrackedDeviceCount
];
char
*
pixels
;
//for saving screenshots to disk
int
framecounter
;