{"id":17976011,"url":"https://github.com/fweidner/UE4-Plugin-OffAxis","last_synced_at":"2025-03-25T15:31:06.733Z","repository":{"id":50060198,"uuid":"131117580","full_name":"fweidner/UE4-Plugin-OffAxis","owner":"fweidner","description":"This plugin provides a fishtank-VR via a so-called OffAxisProjection  by modifying the projection matrix using a custom ULocalPlayer","archived":false,"fork":false,"pushed_at":"2023-12-15T11:07:10.000Z","size":24601,"stargazers_count":74,"open_issues_count":6,"forks_count":19,"subscribers_count":11,"default_branch":"master","last_synced_at":"2023-12-15T12:30:56.545Z","etag":null,"topics":["fishtankvr","offaxisprojection","unreal-engine","unreal-engine-4","unrealengine","virtualproduction","virtualreality","vr"],"latest_commit_sha":null,"homepage":"https://www.tu-ilmenau.de/vwds/team/florian-weidner/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fweidner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-26T07:32:10.000Z","updated_at":"2023-12-15T11:07:13.000Z","dependencies_parsed_at":"2024-10-29T18:05:13.273Z","dependency_job_id":null,"html_url":"https://github.com/fweidner/UE4-Plugin-OffAxis","commit_stats":null,"previous_names":[],"tags_count":7,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fweidner%2FUE4-Plugin-OffAxis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fweidner%2FUE4-Plugin-OffAxis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fweidner%2FUE4-Plugin-OffAxis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fweidner%2FUE4-Plugin-OffAxis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fweidner","download_url":"https://codeload.github.com/fweidner/UE4-Plugin-OffAxis/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245489756,"owners_count":20623789,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fishtankvr","offaxisprojection","unreal-engine","unreal-engine-4","unrealengine","virtualproduction","virtualreality","vr"],"created_at":"2024-10-29T17:21:25.592Z","updated_at":"2025-03-25T15:31:01.724Z","avatar_url":"https://github.com/fweidner.png","language":"C++","funding_links":[],"categories":["VR :"],"sub_categories":["Videos"],"readme":"# UE4-Plugin-OffAxis\n\n![OffAxisExample](https://github.com/fweidner/UE4-Plugin-OffAxis/blob/master/2018-06-13.gif)\n\n## Current version\n- Works with 4.23 :)\n- check out the branch \"UE5\" with info on how to run it for UE5\n\n## General info: \nIt works. But it is (always) experimental :)\n\n* OffAxisProjection / FishTank VR\n  * in 2D Mode: OffAxisActor can be placed arbitrarily.\n  * in 3D Mode: OffAxisActor can be translated in x,y, z and rotated using pitch and roll.\n* Also shows a possibility of how to modify the projection matrix. \n\n## How to use:\nAssuming you start with a new project:\n- If your project is a C++ project, you are good to go. If you have a pure blueprint project, add a random C++ class via File -\u003e Add C++ class (empty class is fine).\n- Copy the Plugin in your (you might need to create a Plugin folder in the directory where your uproject file is).\n- Start (or restart) Unreal Engine. You might get a warning that the plugin needs to be rebuild. That's normal.\n- Update LocalPlayer class in Edit-\u003eProject Settings-\u003eGeneral Settings \n- Adjust Input mappings to your Config/DefaultInput.ini (just copy the below mappins to your Config/DefaultInput.ini. If you don't have one, create a random new mapping in Settings --\u003e Project Settings --\u003e Input. Then the file should be there. Then copy the mappings. Restart UE4.\n- Drag the OffAxisActor in your scene\n- Set position of OffAxisActor to 0,0,0\n- In the OffAxisActor, place the child actors P_a, P_b, and P_c so that the correspond to the corners of your \"virtual window\".\n- Change your NearClippingPlane .1f (Settings --\u003e Project Settings --\u003e Engine --\u003e General Settings --\u003e Near Clip Plane)\n- Select the OffAxisActor in your Project Outliner: set \"Use Off Axis on Start\" to true and change \"Tracking Device\" to None (the Set Tracking Device Setting is still in early stages).\n- Hit play. If it is not working now, close UE4, right-click on your uproject file and regenerate Visual Studio Project Files, try again :)\n- If it starts but the screen is black, try to either move the STartPositionEye of the OffAxisActor along X or (if you have copied the input mappings) play around with pageUp and pageDown.\n\n## Input Mappings\n* Here are the current input mappings the plugin supports/uses. Just copy and paste this bunch in your DefaultInput.ini and restart after updating DefaultInput.ini!\n* For some inputs, you might need to change the key if they are already in use in your project.\n\n### OffAxis\n+ActionMappings=(ActionName=\"HomePosReset\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=Home)\n+ActionMappings=(ActionName=\"ResetEyeOffset\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=Nine)\n+ActionMappings=(ActionName=\"ResetProjectionPlaneOffset\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=Six)\n+ActionMappings=(ActionName=\"ToggleShowDebugMessages\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=V)\n+ActionMappings=(ActionName=\"ToggleUseOffAxis\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=P)\n+ActionMappings=(ActionName=\"Pick\",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftMouseButton)\n+ActionMappings=(ActionName=\"ToggleVisOffAxisMenu\",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=F9)\n+AxisMappings=(AxisName=\"EyeUp\",Scale=1.500000,Key=Up)\n+AxisMappings=(AxisName=\"EyeUp\",Scale=-1.500000,Key=Down)\n+AxisMappings=(AxisName=\"EyeLeft\",Scale=-1.500000,Key=Left)\n+AxisMappings=(AxisName=\"EyeLeft\",Scale=1.500000,Key=Right)\n+AxisMappings=(AxisName=\"EyeForward\",Scale=1.000000,Key=PageUp)\n+AxisMappings=(AxisName=\"EyeForward\",Scale=-1.000000,Key=PageDown)\n+AxisMappings=(AxisName=\"Pick_away\",Scale=0.100000,Key=W)\n+AxisMappings=(AxisName=\"Pick_left\",Scale=-0.100000,Key=A)\n+AxisMappings=(AxisName=\"Pick_down\",Scale=0.100000,Key=Q)\n+AxisMappings=(AxisName=\"Pick_away\",Scale=-0.100000,Key=S)\n+AxisMappings=(AxisName=\"Pick_left\",Scale=0.100000,Key=D)\n+AxisMappings=(AxisName=\"Pick_down\",Scale=-0.100000,Key=E)\n+AxisMappings=(AxisName=\"Wheel\",Scale=1.000000,Key=MouseWheelAxis)\n+AxisMappings=(AxisName=\"MouseX\",Scale=1.000000,Key=MouseX)\n+AxisMappings=(AxisName=\"MouseY\",Scale=1.000000,Key=MouseY)\n+AxisMappings=(AxisName=\"ChangeProjectionPlaneOffset\",Scale=0.100000,Key=Five)\n+AxisMappings=(AxisName=\"ChangeProjectionPlaneOffset\",Scale=-0.100000,Key=Six)\n+AxisMappings=(AxisName=\"MoveUp\",Scale=0.100000,Key=I)\n+AxisMappings=(AxisName=\"MoveDown\",Scale=-0.100000,Key=K)\n+AxisMappings=(AxisName=\"MoveLeft\",Scale=-0.100000,Key=J)\n+AxisMappings=(AxisName=\"MoveRight\",Scale=0.100000,Key=L)\n+AxisMappings=(AxisName=\"Away\",Scale=0.100000,Key=U)\n+AxisMappings=(AxisName=\"Towards\",Scale=-0.100000,Key=O)\n+AxisMappings=(AxisName=\"ChangeEyeOffset\",Scale=0.001000,Key=Seven)\n+AxisMappings=(AxisName=\"ChangeEyeOffset\",Scale=-0.010000,Key=Eight)\n\n### Optitrack related:\n+ActionMappings=(ActionName=\"TryToConnectToServer\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=One)\n+ActionMappings=(ActionName=\"ConnectToOptitrack\",bShift=True,bCtrl=False,bAlt=False,bCmd=False,Key=Y)\n\n## Based on...\n\nhttp://nttl.ru/en\n\nhttps://perspectiveresources.blogspot.de/2013/04/i3d-head-coupled-perspective.html\n\nhttp://iihm.imag.fr/en/demo/hcpmobile/\n\nhttps://www.youtube.com/watch?v=hvrT7FqpPQE\n\nhttps://www.youtube.com/watch?v=-foNLFnrNRc\n\nhttps://www.youtube.com/watch?v=PP38yj3zdqo\n\nhttps://www.youtube.com/watch?v=5ibPBGCAWKo\n\nhttp://csc.lsu.edu/~kooima/articles/genperspective/\n\nMichael Deering. 1992. High resolution virtual reality. ACM SIGGRAPH Computer Graphics 26, 2: 195–202. https://doi.org/10.1145/142920.134039\n\nhttps://answers.unrealengine.com/questions/65003/howto-modify-the-projection-matrix.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffweidner%2FUE4-Plugin-OffAxis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffweidner%2FUE4-Plugin-OffAxis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffweidner%2FUE4-Plugin-OffAxis/lists"}