سلسلة الاسم
XR_ANDROID_raycast
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
464
المراجعة
1
التبعيات المتعلّقة بالإصدارات والإضافات
تاريخ آخر تعديل
2024-10-02
حالة عنوان IP
ما مِن مطالبات معروفة بعناوين IP.
المساهمون
سبنسر كوين، Google
نيهاف جاين، Google
جون بورسي، Google
جاريد فايندر، Google
ليفانا تشين، من Google
"كيني فيركامر"، Google
نظرة عامة
تسمح هذه الإضافة للتطبيق بتنفيذ عمليات بث أشعة على الأجهزة القابلة للتتبُّع في البيئة. يمكن أن تكون تقنية Raycast مفيدة لرصد الأجسام في البيئة التي سيتقاطع معها شعاع. مثلاً:
- لتحديد المكان الذي سيقع فيه جسم عائم عند إسقاطه، باستخدام شعاع عمودي
- لتحديد ما ينظر إليه المستخدم، باستخدام شعاع ضوء موجَّه للأمام
قدرات شعاع البحث المتاحة لطلبات البحث
يتم تعريف الدالة xrEnumerateRaycastSupportedTrackableTypesANDROID على النحو التالي:
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
أوصاف المَعلمات
instanceهو XrInstance الذي تم استردادsystemIdمنه.systemIdهوXrSystemIdالذي يتمّ سرد أنواعه القابلة للتتبّع والمتوافقة مع تصوير الأشعة.-
trackableTypeCapacityInputهي سعةtrackableTypes، أو 0 لاسترداد السعة المطلوبة. trackableTypeCountOutputهو مؤشر إلى عدد عناصر المصفوفة، أو مؤشر إلى السعة المطلوبة في حال كانتtrackableTypeCapacityInputغير كافية.trackableTypesهو مؤشر إلى صفيف من XrTrackableTypeANDROID، ولكن يمكن أن يكونNULLإذا كانtrackableTypeCapacityInputهو0.
- راجِع قسم مَعلمات حجم المخزن المؤقت للحصول على وصف تفصيلي ل retrieving the required
trackableTypessize.
يُدرِج xrEnumerateRaycastSupportedTrackableTypesANDROID الأنواع التي يمكن تتبُّعها والتي تتيح ميزة "تتبُّع الأشعة" من خلال الجلسة الحالية.
الاستخدام الصالح (ضمني)
- يجب تفعيل امتداد
XR_ANDROID_raycastقبل استدعاء xrEnumerateRaycastSupportedTrackableTypesANDROID. instanceيجب أن يكون اسم معرِّف XrInstance صالحًاtrackableTypeCountOutputيجب أن يكون مؤشرًا إلى قيمةuint32_t- إذا لم يكن
trackableTypeCapacityInputهو0، يجب أن يكونtrackableTypesمُشيرًا إلى صفيف من قيمtrackableTypeCapacityInputXrTrackableTypeANDROID.
رموز الإرجاع
XR_SUCCESS
XR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_FUNCTION_UNSUPPORTED
تنفيذ شعاع ضوء
يتم تعريف الدالة xrRaycastANDROID على النحو التالي:
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
أوصاف المَعلمات
sessionهو XrSession الذي ينفّذ تقنية "إلقاء شعاع".-
rayInfoهو XrRaycastInfoANDROID الذي يصف الشعاع المطلوب بثّه. resultsهو مؤشر إلى XrRaycastHitResultsANDROID الذي يتلقّى نتائج شعاع الاختبار.
يمكن للتطبيق تنفيذ عمليات بث أشعة من خلال استدعاء xrRaycastANDROID.
- إذا تقاطعت شعاع مسح ضوئي مع عدد أكبر من الأجسام التي يمكن تتبُّعها مقارنةً بقيمة XrRaycastHitResultsANDROID::maxResults، يجب أن يعرض وقت التشغيل نتائج الاصطدام الأقرب إلى XrRaycastHitResultsANDROID::origin للشعاع.
- إذا تقاطعت شعاع اختبار مع كائن قابل للتتبُّع من النوع
XR_TRACKABLE_TYPE_ANDROID_PLANE، والذي تم تضمينه في مستوى آخر، يجب أن يعرض وقت التشغيل نتيجة الاصطدام للمستوى الذي يتضمّن الكائن فقط. - يجب أن يعرض وقت التشغيل نتائج العناصر التي تم رصدها بترتيب بدءًا من الأقرب إلى الأبعد من XrRaycastInfoANDROID::origin على طول متجه XrRaycastInfoANDROID::trajectory.
- يجب أن يعرض وقت التشغيل القيمة
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDإذا لم يتم سرد النوع القابل للتتبُّع المرتبط بعناصر التحكم XrTrackableTrackerANDROID في XrRaycastInfoANDROID::trackers باستخدام الإجراء xrEnumerateRaycastSupportedTrackableTypesANDROID.
الاستخدام الصالح (ضمني)
- يجب تفعيل امتداد
XR_ANDROID_raycastقبل استدعاء xrRaycastANDROID. sessionيجب أن يكون معرّف XrSession صالحًاrayInfoيجب أن يكون مؤشرًا إلى بنية XrRaycastInfoANDROID صالحة.resultsيجب أن يكون مؤشرًا إلى بنية XrRaycastHitResultsANDROID
رموز الإرجاع
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROIDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_POSE_INVALIDXR_ERROR_TIME_INVALIDXR_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;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية. لا يتم تعريف مثل هذه الهياكل في OpenXR الأساسية أو هذه الإضافة.maxResultsهو الحدّ الأقصىuint32_tلعدد النتائج التي سيتم عرضها.trackerCountهو عددuint32_tفي صفيفtrackers.trackersهو صفيف XrTrackableTrackerANDROID الذي يجب اختبار شعاع البث عليه.originهو XrVector3f الذي يتم بث الشعاع منه.trajectoryهو XrVector3f الذي يتم استهداف الشعاع به.spaceهو XrSpace الذي يتم بث الشعاع فيه.timeهوXrTimeالذي يتم رمي الشعاع عليه.
تصف بنية XrRaycastInfoANDROID الشعاع الذي سيتم بثّه.
- قد تحتوي مصفوفة XrRaycastInfoANDROID::trackers على أجهزة تتبُّع من أنواع مختلفة.
- يجب ألا تحتوي مصفوفة XrRaycastInfoANDROID::trackers على عدة
أجهزة تتبُّع من النوع نفسه، وإلا يجب أن يعرض وقت التشغيل
XR_ERROR_VALIDATION_FAILURE.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_raycastقبل استخدام XrRaycastInfoANDROID. typeيجب أن يكونXR_TYPE_RAYCAST_INFO_ANDROIDnextيجب أن يكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية.trackersيجب أن يكون مؤشرًا إلى مصفوفة منtrackerCountمعالِماتtrackerCountXrTrackableTrackerANDROID صالحةspaceيجب أن يكون معرّف XrSpace صالحًا- يجب أن تكون المَعلمة
trackerCountأكبر من0. - يجب أن يكون كلّ من
spaceوعناصرtrackersقد تم إنشاؤها أو تخصيصها أو استرجاعها من XrSession نفسها.
يتم تعريف بنية XrRaycastHitResultsANDROID على النحو التالي:
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية. لا يتم تعريف مثل هذه الهياكل في OpenXR الأساسية أو هذه الإضافة.resultsCapacityInputهي سعة صفيفresults، أو 0 لتحديد طلب لاسترداد السعة المطلوبة.resultsCountOutputهو مؤشر إلى عددresultsالتي تمّت كتابتها، أو مؤشر إلى السعة المطلوبة في حال كانتresultsCapacityInputغير كافية.resultsهو مؤشر إلى صفيف من XrRaycastHitResultANDROID البنى. يمكن أن تكونNULLإذا كانتresultsCapacityInputتساوي 0.- راجِع قسم مَعلمات حجم المخزن المؤقت للحصول على وصف تفصيلي ل retrieving the required
resultssize.
يحتوي XrRaycastHitResultsANDROID على صفيف النتائج لشعاع اختبار.
يجب أن يضبط وقت التشغيل القيمة resultsCountOutput لتكون أقل من أو مساوية لقيمة
XrRaycastInfoANDROID::maxResults.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_raycastقبل استخدام XrRaycastHitResultsANDROID. typeيجب أن يكونXR_TYPE_RAYCAST_HIT_RESULTS_ANDROIDnextيجب أن يكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية.resultsيجب أن يكون مؤشرًا إلى صفيف من هياكلresultsCapacityInputXrRaycastHitResultANDROID-based- يجب أن تكون المَعلمة
resultsCapacityInputأكبر من0.
يتم تعريف بنية XrRaycastHitResultANDROID على النحو التالي:
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
أوصاف الأعضاء
typeهو XrTrackableTypeANDROID للعنصر القابل للتتبُّع الذي اصطدمت به شعاع الاختبار.trackableهوXrTrackableANDROIDالذي اصطدم به شعاع الضوء، أوXR_NULL_TRACKABLE_ANDROIDإذا كانtypeالذي يمكن تتبُّعهXR_TRACKABLE_TYPE_DEPTH_ANDROID.poseهو XrPosef الذي اصطدم به شعاع الضوء.
يحتوي XrRaycastHitResultANDROID على تفاصيل ناتجة عن اصطدام شعاع.
يجب أن يكون XrRaycastHitResultANDROID::pose لنقطة اصطدام بسطح مستوٍ بحيث يكون محورا X وZ موازيين للسطح المستوٍ، ويكون محور Y عموديًا على السطح المستوٍ.
نوع النتيجة القابلة للتتبّع |
الوصف |
|
تصطدم بالأسطح الأفقية و/أو العمودية لتحديد العمق والاتجاه الصحيحَين للنقطة. |
|
يستخدم معلومات العمق من المشهد بأكمله لتحديد العمق والاتجاه الصحيحَين لنقطة معيّنة. |
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_raycastقبل استخدام XrRaycastHitResultANDROID. typeيجب أن تكون قيمة XrTrackableTypeANDROID صالحة
مثال على رمز برمجي لإطلاق أشعة
يوضّح مثال الرمز البرمجي التالي كيفية تنفيذ عمليات بث الأشعة.
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]
}
ثوابت قائمة التعداد الجديدة
تمّت إضافة ما يلي إلى التعداد XrStructureType:
XR_TYPE_RAYCAST_INFO_ANDROIDXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
التصاميم الجديدة
الدوالّ الجديدة
المشاكل
سجلّ الإصدارات
- المراجعة 1، 2024-10-02 (كيني فيركمير)
- الوصف الأوّلي للإضافة
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجَّلتان كعلامتَين تجاريتَين في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.