+ Ответить в теме
Показано с 1 по 2 из 2

Тема: Типы данных

  1. #1
    cyber-z is on a distinguished road
    Регистрация
    29.11.2017
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Типы данных

    Доброго времени суток, форумчане! Имеется проблема: разбираю Oculus SDK а именно приложенные к нему примеры. Забегая наперед скажу, что в основном писал на C# и очень узконаправленные утилитки, поэтому и нуждаюсь в помощи в этой реализации на C++. В фрагменте кода, там где XMMatrixSet судя по всему идет оперирование с позицией Oculus Rift. Каким образом я могу сохранять эти значения в переменные типа double/float ?
    Код :
    1. #define STAGE4_ConfigureVR ovrEyeRenderDesc eyeRenderDesc[2];                                                                                               \
    2.     eyeRenderDesc[0] = ovr_GetRenderDesc(session, ovrEye_Left, HMDInfo.DefaultEyeFov[0]);                                            \
    3.     eyeRenderDesc[1] = ovr_GetRenderDesc(session, ovrEye_Right, HMDInfo.DefaultEyeFov[1]);                                           \
    4.  
    5. #define STAGE4_GetEyePoses ovrPosef EyeRenderPose[2];                                                                                                    \
    6.     ovrPosef HmdToEyePose[2] = { eyeRenderDesc[0].HmdToEyePose, eyeRenderDesc[1].HmdToEyePose };                   \
    7.     double           ftiming = ovr_GetPredictedDisplayTime(session, 0);                                                              \
    8.     ovrTrackingState hmdState = ovr_GetTrackingState(session, ftiming, ovrTrue);                                                     \
    9.     ovr_CalcEyePoses(hmdState.HeadPose.ThePose, HmdToEyePose, EyeRenderPose);
    10.  
    11. #define STAGE4_GetMatrices XMVECTOR eyeQuat = XMVectorSet(EyeRenderPose[eye].Orientation.x, EyeRenderPose[eye].Orientation.y,                                 \
    12.     EyeRenderPose[eye].Orientation.z, EyeRenderPose[eye].Orientation.w);                                  \
    13.     XMVECTOR eyePos = XMVectorSet(EyeRenderPose[eye].Position.x, EyeRenderPose[eye].Position.y, EyeRenderPose[eye].Position.z, 0);    \
    14.     XMVECTOR CombinedPos = XMVectorAdd(mainCam.Pos, XMVector3Rotate(eyePos, mainCam.Rot));                                            \
    15.     Camera finalCam(CombinedPos, (XMQuaternionMultiply(eyeQuat, mainCam.Rot)));                                                   \
    16.     XMMATRIX view = finalCam.GetViewMatrix();                                                                                         \
    17.     ovrMatrix4f p = ovrMatrix4f_Projection(eyeRenderDesc[eye].Fov, 0.2f, 1000.0f, ovrProjection_None);                                \
    18.     XMMATRIX proj = XMMatrixSet(p.M[0][0], p.M[1][0], p.M[2][0], p.M[3][0], \
    19.     p.M[0][1], p.M[1][1], p.M[2][1], p.M[3][1], \
    20.     p.M[0][2], p.M[1][2], p.M[2][2], p.M[3][2], \
    21.     p.M[0][3], p.M[1][3], p.M[2][3], p.M[3][3]);

    P.S вопрос скорее к знанию синтаксиса C++, заранее благодарю за помощь

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    39
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: Типы данных

    Очевидно что #define определяет макрос для тупой копипасты кода, в обход семантики С++. То есть вызов макроса

    Код :
    1. STAGE4_ConfigureVR;

    после обработки препроцессором превращается в

    Код :
    1. ovrEyeRenderDesc eyeRenderDesc[2];
    2. eyeRenderDesc[0] = ovr_GetRenderDesc(session, ovrEye_Left, HMDInfo.DefaultEyeFov[0]);
    3. eyeRenderDesc[1] = ovr_GetRenderDesc(session, ovrEye_Right, HMDInfo.DefaultEyeFov[1]);

    Очевидно что этот код создает массив из двух структур ovrEyeRenderDesc, а потом каждой структуре присваиваются значения которые вернула функция ovr_GetRenderDesc().

    Что там входит в структуру ovrEyeRenderDesc я не знаю.
    2B OR NOT(2B) = FF

+ Ответить в теме

Похожие темы

  1. [Fortran] Сложные типы данных.Одномерные массивы.
    Здравствуйте.Помогите мне плз с задачей. Я составил,но вместо полож-ого числа выдает отрицательное.Уже пробовал но не могу исправить( ...
    от sss1014 в разделе Решите мне задачку
  2. Абстрактные типы данных. Реализация дерева общего вида.
    Нужна помощь. Задача - реализовать на языке Си дерево общего вида. Программа для работы с деревом должна уметь а) Добавить элемент в дерево. б)...
    от Dju в разделе C и C++
  3. Исправте программу.Ссылочные типы данных. Динамическая память
    Дана матрица целых чисел размером 4x4. Определите сумму элементов расположенных выше главной диагонали. Результат вывести на экран монитора. ...
    от ромка) в разделе Решите мне задачку
  4. Ссылочные типы данных. Динамическая память/помогите исправить
    Составить программы решения задач с применением указателей и динамической памяти (!!!статические переменные не использовать!!!). 1)Напишите...
    от ромка) в разделе Решите мне задачку
  5. ms query и типы данных
    Может кто сталкивался - при запросе средствами ms query из файла exel все числовые значения из поля исчезают если в поле (в других строчках) есть...
    от Вагнер Александр в разделе MS Office и VB(A).

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения