رشته نام
XR_ANDROID_raycast
نوع پسوند
پسوند نمونه
شماره برنامه افزودنی ثبت شده
464
تجدید نظر
1
وابستگی های افزونه و نسخه
آخرین تاریخ اصلاح
02-10-2024
وضعیت IP
هیچ ادعای IP شناخته شده ای وجود ندارد.
مشارکت کنندگان
اسپنسر کوین، گوگل
نیهاو جین، گوگل
جان پورسی، گوگل
جارد فایندر، گوگل
لوانا چن، گوگل
کنی ورکامر، گوگل
نمای کلی
این برنامه افزودنی به برنامه اجازه میدهد تا در برابر ردیابیهای موجود در محیط، پرتوهای ارسالی را انجام دهد. پرتوها می توانند برای تشخیص اشیایی در محیطی که پرتو با آنها تلاقی می کند مفید باشد. به عنوان مثال:
- برای تعیین محل سقوط یک جسم شناور با استفاده از پرتوهای عمودی.
- برای تعیین اینکه کاربر به کجا نگاه می کند، با استفاده از پرتوی رو به جلو.
قابلیتهای raycast پشتیبانی شده توسط Query
تابع xrEnumerateRaycastSupportedTrackableTypesANDROID به صورت زیر تعریف می شود:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
توضیحات پارامترها
-
instanceXrInstance است کهsystemIdاز آن بازیابی شده است. -
systemIdXrSystemIdاست که انواع قابل ردیابی پشتیبانی شده برای پخش پرتویی در حال شمارش است. -
trackableTypeCapacityInputظرفیتtrackableTypesیا 0 برای بازیابی ظرفیت مورد نیاز است. -
trackableTypeCountOutputیک اشارهگر به تعداد آرایه یا اشارهگر به ظرفیت مورد نیاز در مواردی است کهtrackableTypeCapacityInputکافی نیست.-
trackableTypesاشاره گر به آرایه ای از XrTrackableTypeANDROID است، اما اگرtrackableTypeCapacityInput0باشد، می تواندNULLباشد.
-
- برای توضیح دقیق بازیابی اندازه
trackableTypesمورد نیاز، به بخش پارامترهای اندازه بافر مراجعه کنید.
xrEnumerateRaycastSupportedTrackableTypesANDROID انواع قابل ردیابی را که از پخش پرتوی در جلسه جاری پشتیبانی می کنند، برمی شمارد.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_raycastباید قبل از فراخوانی xrEnumerateRaycastSupportedTrackableTypesANDROID فعال شود -
instanceباید یک دسته XrInstance معتبر باشد -
trackableTypeCountOutputباید یک اشاره گر به یک مقدارuint32_tباشد - اگر
trackableTypeCapacityInput0نباشد،trackableTypesباید نشانگر آرایه ای از مقادیرtrackableTypeCapacityInputXrTrackableTypeANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS
-
XR_ERROR_VALIDATION_FAILURE -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_FUNCTION_UNSUPPORTED
raycast را انجام دهید
تابع xrRaycastANDROID به صورت زیر تعریف می شود:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
توضیحات پارامترها
-
sessionXrSession است که raycast را انجام می دهد. -
rayInfoXrRaycastInfoANDROID است که اشعه را برای ریختن توصیف می کند. -
resultsیک اشاره گر به XrRaycastHitResultsANDROID است که نتایج raycast را دریافت می کند.
این برنامه میتواند با فراخوانی xrRaycastANDROID ارسالهای پرتویی را انجام دهد.
- اگر یک raycast تعداد trackable های بیشتری را نسبت به XrRaycastHitResultsANDROID::maxResults قطع کند، زمان اجرا باید نتایج ضربه ای را که نزدیک ترین به XrRaycastHitResultsANDROID::origin پرتو هستند را برگرداند.
- اگر یک raycast یک قابل ردیابی از نوع
XR_TRACKABLE_TYPE_ANDROID_PLANEرا که توسط صفحه دیگری جمع شده است قطع کند، زمان اجرا باید نتیجه ضربه را فقط برای صفحه زیرمجموعه بازگرداند. - زمان اجرا باید نتایج ضربه را به نزدیکترین به دورترین ترتیب از XrRaycastInfoANDROID::origin در امتداد بردار XrRaycastInfoANDROID::مسیر برگرداند.
- اگر نوع قابل ردیابی مربوط به دستههای XrTrackableTrackerANDROID در XrRaycastInfoANDROID::ردیابها توسط xrEnumerateRaycastSupportedTrackableTypes ANDROID شمارش نشده است، زمان اجرا باید
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDرا برگرداند.
استفاده معتبر (ضمنی)
- برنامه افزودنی
XR_ANDROID_raycastباید قبل از تماس با xrRaycastANDROID فعال شود -
sessionباید یک دسته XrSession معتبر باشد -
rayInfoباید یک اشاره گر به یک ساختار معتبر XrRaycastInfoANDROID باشد -
resultsباید یک اشاره گر به ساختار XrRaycastHitResultsANDROID باشد
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID -
XR_ERROR_VALIDATION_FAILURE -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_SESSION_LOST -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_POSE_INVALID -
XR_ERROR_TIME_INVALID -
XR_ERROR_FEATURE_UNSUPPORTED
ساختار XrRaycastInfoANDROID به صورت زیر تعریف می شود:
typedef struct XrRaycastInfoANDROID {
XrStructureType type;
void* next;
uint32_t maxResults;
uint32_t trackerCount;
const XrTrackableTrackerANDROID* trackers;
XrVector3f origin;
XrVector3f trajectory;
XrSpace space;
XrTime time;
} XrRaycastInfoANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
maxResultsحداکثر تعدادuint32_tبرای بازگشت است. -
trackerCountتعدادuint32_tآرایهtrackersاست. -
trackersآرایه ای از XrTrackableTracker ANDROID هستند که پرتوهای ریخته شده باید بر روی آن آزمایش شوند. -
originXrVector3f است که پرتو از آن پرتاب می شود. -
trajectoryXrVector3f است که پرتو در آن هدف قرار می گیرد. -
spaceهمان XrSpace است که پرتو در آن ریخته می شود. -
timeXrTimeاست که پرتو در آن پرتاب می شود.
ساختار XrRaycastInfoANDROID اشعه ای را که باید پخش شود را توصیف می کند.
- آرایه XrRaycastInfoANDROID::trackers ممکن است دارای ردیاب هایی از انواع مختلف باشد.
- آرایه XrRaycastInfoANDROID::trackers نباید حاوی چندین ردیاب از یک نوع باشد، در غیر این صورت زمان اجرا باید
XR_ERROR_VALIDATION_FAILUREبرگرداند.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_raycastباید قبل از استفاده از XrRaycastInfoANDROID فعال شود -
typeبایدXR_TYPE_RAYCAST_INFO_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد -
trackersباید اشاره گر به آرایه ای ازtrackerCountدسته های معتبر XrTrackableTrackerANDROID باشند -
spaceباید یک دسته XrSpace معتبر باشد - پارامتر
trackerCountباید بیشتر از0باشد - هم
spaceو هم عناصرtrackersباید از یک XrSession ایجاد، تخصیص یا بازیابی شده باشند.
ساختار XrRaycastHitResultsANDROID به صورت زیر تعریف می شود:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
resultsCapacityInputظرفیت آرایهresultsیا 0 برای نشان دادن درخواست برای بازیابی ظرفیت مورد نیاز است. -
resultsCountOutputیک اشاره گر به تعدادresultsنوشته شده است، یا یک اشاره گر به ظرفیت مورد نیاز در صورتی کهresultsCapacityInputکافی نباشد. -
resultsیک اشاره گر به آرایه ای از ساختارهای XrRaycastHitResultANDROID است. اگرresultsCapacityInput0 باشد می تواندNULLباشد. - برای توضیحات دقیق در مورد بازیابی اندازه
resultsمورد نیاز، به بخش پارامترهای اندازه بافر مراجعه کنید.
XrRaycastHitResultsANDROID شامل آرایه ای از بازدیدهای یک raycast است.
زمان اجرا باید resultsCountOutput کمتر یا مساوی با XrRaycastInfoANDROID::maxResults تنظیم کند.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_raycastباید قبل از استفاده از XrRaycastHitResultsANDROID فعال شود -
typeبایدXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد -
resultsباید نشانگر آرایه ای از ساختارهایresultsCapacityInputXrRaycastHitResultANDROID باشد - پارامتر
resultsCapacityInputباید بزرگتر از0باشد
ساختار XrRaycastHitResultANDROID به صورت زیر تعریف می شود:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
توضیحات اعضا
-
typeXrTrackableTypeANDROID از trackable است که raycast ضربه زده است. -
trackableXrTrackableANDROIDاست که raycast به آن ضربه زد، یاXR_NULL_TRACKABLE_ANDROIDاگرtypeقابل پیگیریXR_TRACKABLE_TYPE_DEPTH_ANDROIDبود. -
poseXrPosef است که raycast به آن برخورد کرد.
XrRaycastHitResultANDROID حاوی جزئیات یک ضربه پرتویی است.
XrRaycastHitResultANDROID::pose برای ضربه هواپیما باید به گونه ای باشد که X و Z موازی با هواپیما باشند و محور Y با هواپیما عادی باشد.
نوع ضربه قابل پیگیری | توضیحات |
| برای تعیین عمق و جهت صحیح نقطه، به سطوح افقی و/یا عمودی برخورد می کند. |
| از اطلاعات عمق کل صحنه برای تعیین عمق و جهت صحیح یک نقطه استفاده می کند. |
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_raycastباید قبل از استفاده از XrRaycastHitResultANDROID فعال شود -
typeباید یک مقدار معتبر XrTrackableTypeANDROID باشد
کد مثال برای raycasting
کد مثال زیر نحوه اجرای raycasts را نشان می دهد.
XrSession session; // previously initialized
XrTime updateTime; // previously initialized
XrSpace appSpace; // space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrPosef headPose; // latest pose of the HMD.
XrTrackableTrackerANDROID planeTracker; // tracker for plane trackables.
XrTrackableTrackerANDROID depthTracker; // tracker for depth trackables.
// Perform a raycast against multiple trackers.
XrTrackableTrackerANDROID trackers[] = {
&planeTracker,
&depthTracker,
};
XrRaycastInfoANDROID rayInfo = {XR_TYPE_RAYCAST_INFO_ANDROID};
rayInfo.trackerCount = sizeof(trackers) / sizeof(XrTrackableTrackerANDROID);
rayInfo.trackers = trackers;
rayInfo.origin = headPose.position;
rayInfo.trajectory = CalculateForwardDirectionFromHeadPose(headPose);
rayInfo.space = appSpace;
rayInfo.time = updateTime;
uint32_t totalHitResults = 0;
constexpr uint32 NUM_DESIRED_RESULTS = 2;
XrRaycastHitResultANDROID hitResult[NUM_DESIRED_RESULTS];
XrRaycastHitResultsANDROID hitResults = {XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID};
hitResults.maxResults = NUM_DESIRED_RESULTS;
hitResults.resultsCapacityInput = NUM_DESIRED_RESULTS;
hitResults.results = hitResult;
XrResult result = xrRaycastANDROID(session, &rayInfo, &hitResults);
if (result == XR_SUCCESS && hitResults.resultsCountOutput >= 1) {
// Hit results are returned in closest-to-farthest order in
// hitResults.results[0] .. hitResults.results[hitResults.resultsCountOutput - 1]
}
ثابت های جدید Enum
شمارش XrStructureType با:
-
XR_TYPE_RAYCAST_INFO_ANDROID -
XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
ساختارهای جدید
توابع جدید
مسائل
تاریخچه نسخه
- بازبینی 1، 02/10/2024 (کنی ورکامر)
- توضیحات پسوند اولیه
OpenXR™ و لوگوی OpenXR علائم تجاری متعلق به The Khronos Group Inc. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.