Visual StudioでOculusがやりたい(角度取得編)
そもそもなんでUnityでやらんといけんのじゃ!!
...というよくわからない激怒からVisual StudioでOculusを始めました.
レンダリングは時間がかかるので今回はVisual Studioの簡単な環境構築+角度取得コードを
(Oculusの導入方法はいろんなところにあるので割愛します)
Visual Studioの環境構築
今回私はVisual Studio2013を使用.
Oculus SDKのSamplesの中からslnを起動して見ながらやるといいかも.
以下Visual Studioの設定
追加のインクルードディレクトリ
$(OVRSDKROOT)\LibOVR\Include
$(OVRSDKROOT)\LibOVRKernel\Src
$(OVRSDKROOT)はOCULUSをインクルードしたところですがおそらく環境変数として登録されてるのではないかと.
追加のライブラリディレクトリ
$(OVRSDKROOT)\LibOVR\Lib\Windows\Win32\Debug\VS2013
$(OVRSDKROOT)\LibOVRKernel\Lib\Windows\Win32\Debug\VS2013
VS2013のところは環境によって異なります.
追加の入力ファイル
$(OVRSDKROOT)\LibOVRKernel\Lib\Windows\Win32\Debug\VS2013\LibOVRKernel.lib
$(OVRSDKROOT)\LibOVR\Lib\Windows\$(Platform)\$(Configuration)\VS2013\LibOVR.lib
ランタイムライブラリ
自分は/MTdにしています. 設定次第では動かないかも.
プログラム
今回Oculusの姿勢を出力するコンソールプログラムを作りました.
簡単なものなのでここに載せます.
#include <stdio.h>
#include <tchar.h>
// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
#include <Windows.h>
#include <opencv.hpp>
#include <highgui.hpp>
#include <iostream>
#include <fstream>
#include <string>
//oculus使用
#include <OVR_CAPI_0_8_0.h>
#include <Kernel/OVR_System.h>
#include "OVR_CAPI.h"
#include "OVR_CAPI_GL.h"
using namespace std;
using namespace OVR;
void Application()
{
ovrResult result = ovr_Initialize(nullptr);
if (OVR_FAILURE(result)){
cout << "ovr_Initialize FAILURE" << endl;
return;
}
//ovrHmd hmd = nullptr;
ovrSession session;
ovrGraphicsLuid luid;
result = ovr_Create(&session, &luid);
if (result == ovrSuccess)
{
// Get more details about the HMD.
ovrHmdDesc desc = ovr_GetHmdDesc(session);
ovrSizei resolution = desc.Resolution;
//get oculus tracking
ovr_ConfigureTracking(session, ovrTrackingCap_Orientation |
ovrTrackingCap_MagYawCorrection |
ovrTrackingCap_Position, 0);
while (1){
// Do something with the HMD.
// Query the HMD for the current tracking state.
ovrTrackingState ts = ovr_GetTrackingState(session, ovr_GetTimeInSeconds(),NULL);
if (ts.StatusFlags & (ovrStatus_OrientationTracked | ovrStatus_PositionTracked))
{
ovrPoseStatef pose = ts.HeadPose;
cout << "X= " << pose.ThePose.Orientation.x << endl;
cout << "y= " << pose.ThePose.Orientation.y << endl;
cout << "z= " << pose.ThePose.Orientation.z << endl;
//ファイルに書き込み
std::ofstream ofs("C:\\works\\KinectInteraction\\Debug\\HeadPosition.txt");
ofs << pose.ThePose.Orientation.y << endl;
ofs << pose.ThePose.Orientation.x << endl;
ofs << pose.ThePose.Orientation.z << endl;
Sleep(100);
}
if (cv::waitKey(10) != -1)
break;
}
ovr_Destroy(session);
}
ovr_Shutdown();
}
int _tmain(int argc, _TCHAR* argv[])
{
Application();
return 0;
}
OpenCV入ってるけど適宜変えてください 笑
Help
たまにロール・ピッチ・ヨー角が反転してもとに戻りません.
サンプルプログラムの場合はすぐに戻るのに...
だれかわかる人がいたら教えてください!
参考
Author And Source
この問題について(Visual StudioでOculusがやりたい(角度取得編)), 我々は、より多くの情報をここで見つけました https://qiita.com/yjiro0403/items/fb119d2206cf9178a57e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .