<commit_before>===
=== Getting started
===

Delete any cmake files to ensure we start from a fresh copy

    rm -rf CMakeCache.txt CMakeFiles

Search for required/optional libraries and create a Makefile.

    cmake .

If cmake indicates that an error occurred, you probably do not have
all of the libraries that this code requires. If you are missing a
library, look for additional help in this file or in other files in
this directory.

Try to compile the programs

    make

Try running a program

    ./ogl3-triangle

Check out model loading and texturing capabilities

    ./ogl3-assimp models/duck.dae

Run code for an HMD:

    ./hmd.sh ./ogl3-triangle

Run code on the IVS display wall (if you have permission to do so)

    ./ivs.sh ./ogl3-triangle

Test to see if program will work on IVS without access to the IVS display wall.

    ./local.sh ./ogl3-triangle

Run code on the IVS display wall and update the viewport based on tracking the user's head (if you have permission to do so)

    ./ivs-track.sh ./ogl3-triangle

Run code on the IVS display wall and account for the screen bezels (if you have permission to do so)

    ./ivs3.sh ./ogl3-triangle


===
=== Libraries used by these programs
===

OpenGL 3.2 or higher (required) - OpenGL is available on all Linux
machines. To check the version of OpenGL on your computer, run
"glxgears | grep version". Ignore any lines that say "glx" and the
other version numbers should indicate which version of OpenGL your
machine supports. The program "glxgears" is also typically available
on Linux. It is a simple OpenGL program that shows spinning gears and
can be used to verify that OpenGL is working properly on your machine.

GLEW (required) - Some functions are only available in newer versions
of OpenGL. When you write a modern OpenGL program, many of the
functions that you call did not exist in older versions of
OpenGL. GLEW allows you to access those functions easily without extra
work on your part. It also makes it easier to determine which OpenGL
features are supported on the computer you are running the program on.

 - For a guide to install GLEW, see: GLEW-INSTALL.txt
 - Homepage: http://glew.sourceforge.net/
 - License: https://github.com/nigels-com/glew/blob/master/LICENSE.txt

Freeglut (required) - OpenGL doesn't provide a cross-platform way to
create a window that you can draw on. Freeglut is one cross platform
library that makes it relatively easy to create windows, handle
mouse/keyboard inputs, etc. in a cross-platform way. A new, but
similar, alternative is GLFW. To install Freeglut, look for packages
named freeglut, freeglut-dev in your package manager and install those
packages. An earlier version of a similar library, called GLUT may or
may not work with this code.

 - For a guide to install Freeglut, see FREEGLUT-INSTALL.txt
 - Homepage: http://freeglut.sourceforge.net/
 - Freeglut license: https://github.com/dcnieho/FreeGLUT/blob/git_master/freeglut/freeglut/COPYING

ImageMagick's MagickCore library (optional, necessary to load textures
from image file) - OpenGL doesn't provide a way for you to load common
image files. If you want textures, your program must read, parse and
interpret different image file types. ImageMagick supports nearly
every kind of image file format you can find.

 - For a guide to install ImageMagick, see IMAGEMAGICK-INSTALL.txt
 - Version 6.7.5-5 (circa 2012) or higher is recommended; the brightness of images in older versions may be incorrect.
 - Homepage: http://www.imagemagick.org/
 - ImageMagick License: http://www.imagemagick.org/script/license.php

ASSIMP (optional, necessary to load 3D model files)
 - For a guide to install ASSIMP, see ASSIMP-INSTALL.txt
 - Homepage: http://assimp.sourceforge.net/
 - License: http://assimp.sourceforge.net/main_license.html

VRPN (optional, necessary to communicate with a VRPN tracking system server)
 - For a guide to install VRPN, see VRPN-INSTALL.txt
 - Homepage: http://www.cs.unc.edu/Research/vrpn/
 - License: http://www.cs.unc.edu/Research/vrpn/obtaining_vrpn.html


===
=== Compilation system
===

cmake - Cmake is a modern compilation system that is now easily
installed on nearly any Linux machine via the package manager. You
need to download and install this before you can compile the programs
in this package.

===
=== Units & coordinate systems
===

All of this software is written such that 1 unit distance is 1
meter. Any models we load should be in meters and the tracking system
returns results in meters. We always assume OpenGL coordinate system
(X=right, Y=up, Z=out of screen toward viewer).

On the display wall, the origin is at the center of the room and the
screen is at approximately z = -3.5 meters. If you are manually
placing the camera (i.e., with the mouse) without using the tracking
system on the display wall, I'd suggest placing the camera at (0, 1.5,
0) (approximate eye height), have it look down -z, and place your
object so that it has z values less than -3.5. Then, if you view the
program later on IVS with head-tracking enabled, the view that the
user will see will be approximately the same.
<commit_msg>add note about libovr to readme<commit_after>===
=== Getting started
===

Delete any cmake files to ensure we start from a fresh copy

    rm -rf CMakeCache.txt CMakeFiles

Search for required/optional libraries and create a Makefile.

    cmake .

If cmake indicates that an error occurred, you probably do not have
all of the libraries that this code requires. If you are missing a
library, look for additional help in this file or in other files in
this directory.

Try to compile the programs

    make

Try running a program

    ./ogl3-triangle

Check out model loading and texturing capabilities

    ./ogl3-assimp models/duck.dae

Run code for an HMD:

    ./hmd.sh ./ogl3-triangle

Run code on the IVS display wall (if you have permission to do so)

    ./ivs.sh ./ogl3-triangle

Test to see if program will work on IVS without access to the IVS display wall.

    ./local.sh ./ogl3-triangle

Run code on the IVS display wall and update the viewport based on tracking the user's head (if you have permission to do so)

    ./ivs-track.sh ./ogl3-triangle

Run code on the IVS display wall and account for the screen bezels (if you have permission to do so)

    ./ivs3.sh ./ogl3-triangle

Run the code using the Oculus HMD

    ./oculus.sh ./ogl3-triangle


===
=== Libraries used by these programs
===

OpenGL 3.2 or higher (required) - OpenGL is available on all Linux
machines. To check the version of OpenGL on your computer, run
"glxgears | grep version". Ignore any lines that say "glx" and the
other version numbers should indicate which version of OpenGL your
machine supports. The program "glxgears" is also typically available
on Linux. It is a simple OpenGL program that shows spinning gears and
can be used to verify that OpenGL is working properly on your machine.

GLEW (required) - Some functions are only available in newer versions
of OpenGL. When you write a modern OpenGL program, many of the
functions that you call did not exist in older versions of
OpenGL. GLEW allows you to access those functions easily without extra
work on your part. It also makes it easier to determine which OpenGL
features are supported on the computer you are running the program on.

 - For a guide to install GLEW, see: GLEW-INSTALL.txt
 - Homepage: http://glew.sourceforge.net/
 - License: https://github.com/nigels-com/glew/blob/master/LICENSE.txt

Freeglut (required) - OpenGL doesn't provide a cross-platform way to
create a window that you can draw on. Freeglut is one cross platform
library that makes it relatively easy to create windows, handle
mouse/keyboard inputs, etc. in a cross-platform way. A new, but
similar, alternative is GLFW. To install Freeglut, look for packages
named freeglut, freeglut-dev in your package manager and install those
packages. An earlier version of a similar library, called GLUT may or
may not work with this code.

 - For a guide to install Freeglut, see FREEGLUT-INSTALL.txt
 - Homepage: http://freeglut.sourceforge.net/
 - Freeglut license: https://github.com/dcnieho/FreeGLUT/blob/git_master/freeglut/freeglut/COPYING

ImageMagick's MagickCore library (optional, necessary to load textures
from image file) - OpenGL doesn't provide a way for you to load common
image files. If you want textures, your program must read, parse and
interpret different image file types. ImageMagick supports nearly
every kind of image file format you can find.

 - For a guide to install ImageMagick, see IMAGEMAGICK-INSTALL.txt
 - Version 6.7.5-5 (circa 2012) or higher is recommended; the brightness of images in older versions may be incorrect.
 - Homepage: http://www.imagemagick.org/
 - ImageMagick License: http://www.imagemagick.org/script/license.php

ASSIMP (optional, necessary to load 3D model files)
 - For a guide to install ASSIMP, see ASSIMP-INSTALL.txt
 - Homepage: http://assimp.sourceforge.net/
 - License: http://assimp.sourceforge.net/main_license.html

VRPN (optional, necessary to communicate with a VRPN tracking system server)
 - For a guide to install VRPN, see VRPN-INSTALL.txt
 - Homepage: http://www.cs.unc.edu/Research/vrpn/
 - License: http://www.cs.unc.edu/Research/vrpn/obtaining_vrpn.html

LibOVR (optional, necessary to run this code with the Oculus HMD)
 - For a guide to install LibOVR, see OCULUS-INSTALL.txt


===
=== Compilation system
===

cmake - Cmake is a modern compilation system that is now easily
installed on nearly any Linux machine via the package manager. You
need to download and install this before you can compile the programs
in this package.

===
=== Units & coordinate systems
===

All of this software is written such that 1 unit distance is 1
meter. Any models we load should be in meters and the tracking system
returns results in meters. We always assume OpenGL coordinate system
(X=right, Y=up, Z=out of screen toward viewer).

On the display wall, the origin is at the center of the room and the
screen is at approximately z = -3.5 meters. If you are manually
placing the camera (i.e., with the mouse) without using the tracking
system on the display wall, I'd suggest placing the camera at (0, 1.5,
0) (approximate eye height), have it look down -z, and place your
object so that it has z values less than -3.5. Then, if you view the
program later on IVS with head-tracking enabled, the view that the
user will see will be approximately the same.

{'fraction_non_alphanumeric': 0.06440839694656489, 'fraction_numerical': 0.005629770992366412, 'mean_word_length': 3.8210671573137076, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 4, 'lorem ipsum': 0, 'www.': 8, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5663221', 'n_tokens_mistral': 3028, 'n_tokens_neox': 2834, 'n_words': 1511}