XR_ANDROID_scene_meshing
Name String
XR_ANDROID_scene_meshing
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
719
المراجعة
3
حالة التصديق
لم تتم المصادقة عليها
الاعتماد على الإضافات والإصدارات
تاريخ آخر تعديل
2025-05-15
حالة الملكية الفكرية
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
"سبنسر كوين"، Google
"جاريد فايندر"، Google
"أنطونيو فونتان"، Google
"كيرن أوفرتورف"، Google
"نيهاف جاين"، Google
"سالار خان"، Google
"سيباستيان كلوز"، Google
"يورغن شتورم"، Google
"فيني داسيلفا"، Google
"ريكاردو كامبل"، Google
نظرة عامة
تهدف هذه الإضافة إلى توفير شبكات تمثّل تقريبًا العناصر المادية في بيئة المستخدم.
يمكن للتطبيقات استخدام هذه الإضافة لعرض المشهد والسماح للعناصر الافتراضية بالتفاعل مع العناصر المادية، مثل الاصطدامات.
يتم إنشاء بيانات شبكة المشهد من خلال وقت التشغيل ومشاركتها مع التطبيق باستخدام XrSceneMeshingTrackerANDROID وXrSceneMeshSnapshotANDROID . يمكن للتطبيقات الوصول إلى القيم في معلومات الشبكة الفرعية للمشهد من خلال XrSceneSubmeshStateANDROID التي يتم عرضها من xrGetAllSubmeshStatesANDROID . يمكن للتطبيقات الوصول إلى القيم في بيانات الشبكة الفرعية للمشهد من خلال XrSceneSubmeshDataANDROID التي يتم عرضها من xrGetSubmeshDataANDROID .
تُعدّ بيانات شبكة المشهد معلومات شخصية حساسة وترتبط ارتباطًا وثيقًا بالخصوصية الشخصية والسلامة. ننصح بشدة بأن تطلب التطبيقات التي تخزّن بيانات شبكة المشهد أو تنقلها من المستخدم دائمًا الموافقة النشطة والمحدّدة على ذلك.
الأذونات
يجب أن تتضمّن تطبيقات Android الإذن android.permission.SCENE_UNDERSTANDING_FINE في ملف البيان الخاص بها. يُعدّ إذن android.permission.SCENE_UNDERSTANDING_FINE من الأذونات الحسّاسة لأنّه يسمح لوقت التشغيل بدراسة بيئة المستخدم.
يجب أن يطلب التطبيق الإذن أثناء التشغيل لاستخدام هذه الوظائف:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(مستوى الحماية: خطير)
فحص إمكانات النظام
يتم تعريف بنية XrSystemSceneMeshingPropertiesANDROID على النحو التالي:
typedef struct XrSystemSceneMeshingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
supportsSceneMeshingهوXrBool32يشير إلى ما إذا كان النظام يتيح استخدام ميزة "الشبكة الثلاثية الأبعاد للمشهد".
يمكن للتطبيق فحص ما إذا كان النظام قادرًا على إنشاء شبكة المشهد من خلال ربط بنية XrSystemSceneMeshingPropertiesANDROID بـ XrSystemProperties عند استدعاء xrGetSystemProperties .
إذا عرض وقت التشغيل XR_FALSE لـ supportsSceneMeshing، يعني ذلك أنّ النظام لا يتيح ميزة "شبكة المشهد"، وبالتالي يجب أن يعرض XR_ERROR_FEATURE_UNSUPPORTED من xrCreateSceneMeshingTrackerANDROID . يجب أن يتجنّب التطبيق استخدام وظيفة "شبكة المشهد" عندما تكون قيمة supportsSceneMeshing هي XR_FALSE .
إذا عرض وقت التشغيل القيمة XR_TRUE لـ supportsSceneMeshing، يعني ذلك أنّ النظام يتيح ميزة "الشبكة الثلاثية الأبعاد للمشهد".
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استخدام XrSystemSceneMeshingPropertiesANDROID - يجب أن يكون
typeXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية
يصف التعداد XrSceneMeshSemanticLabelSetANDROID مجموعات التصنيفات الدلالية لإنشاء شبكة المشهد. وتمثّل كل قيمة في هذا التعداد تعدادًا آخر يحتوي على التصنيفات الدلالية. على سبيل المثال، تمثّل القيمة XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID المجموعة XrSceneMeshSemanticLabelANDROID .
typedef enum XrSceneMeshSemanticLabelSetANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT2_ANDROID = 1000801000,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;
في ما يلي معاني قيم تعداد الخيارات:
وصف التعداد
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
تمثّل مجموعة التصنيفات الدلالية هذه عدم توفّر تصنيفات دلالية.
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
تمثّل مجموعة التصنيفات الدلالية هذه XrSceneMeshSemanticLabelANDROID.
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT2_ANDROID
تمثّل مجموعة التصنيفات الدلالية هذه XrSceneMeshSemanticLabel2ANDROID. (تمت الإضافة من خلال إضافة XR_ANDROID_scene_meshing_semantic_label2)
يتم تعريف الدالة xrEnumerateSupportedSemanticLabelSetsANDROID على النحو التالي:
XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets);
أوصاف المَعلمات
-
instanceهو XrInstance أنشأه التطبيق. -
systemIdهوXrSystemIdتمت إعادة محاولة الحصول عليه من xrGetSystem . -
supportedSemanticLabelSetsInputCapacityهي سعةsupportedSemanticLabelSets، أو 0 لاسترداد السعة المطلوبة. -
supportedSemanticLabelSetsOutputCountهو مؤشر إلى عددsupportedSemanticLabelSetsالمكتوبة، أو مؤشر إلى السعة المطلوبة في حال عدم كفايةsupportedSemanticLabelSetsInputCapacity. -
supportedSemanticLabelSetsهو مؤشر إلى مصفوفة من XrSceneMeshSemanticLabelSetANDROID . يمكن أن تكون القيمةNULLإذا كانت قيمةsupportedSemanticLabelSetsInputCapacityهي 0. - يُرجى الاطّلاع على فصل مَعلمات حجم ذاكرة التخزين المؤقت للحصول على وصف تفصيلي لاسترداد حجم
supportedSemanticLabelSetsالمطلوب.
يمكن للتطبيق تعداد مجموعات التصنيفات الدلالية التي يتيحها النظام باستخدام دالة xrEnumerateSupportedSemanticLabelSetsANDROID.
يجب أن يتيح كل نظام على الأقل استخدام XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID لأنّ قيمة التعداد هذه لا تمثّل أي مجموعة تصنيفات دلالية ويمكن استخدامها في حال لم يكن التطبيق بحاجة إلى دلالات الرؤوس.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل طلب xrEnumerateSupportedSemanticLabelSetsANDROID - يجب أن يكون
instanceمقبض XrInstance صالحًا - يجب أن يكون
supportedSemanticLabelSetsOutputCountمؤشرًا إلى قيمةuint32_t - إذا لم تكن قيمة
supportedSemanticLabelSetsInputCapacityهي0، يجب أن تكون قيمةsupportedSemanticLabelSetsمؤشرًا إلى مصفوفة من قيمsupportedSemanticLabelSetsInputCapacityXrSceneMeshSemanticLabelSetANDROID
رموز الإرجاع
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
إنشاء مقبض لتتبُّع شبكة المشهد
XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)
يمثّل المقبض XrSceneMeshingTrackerANDROID أداة تتبُّع لإنشاء شبكة المشهد وإدارة الموارد ذات الصلة.
يمكن استخدام هذا الاسم المعرِّف لإنشاء لقطة لشبكة المشهد باستخدام xrCreateSceneMeshSnapshotANDROID في هذه الإضافة.
يتم تعريف الدالة xrCreateSceneMeshingTrackerANDROID على النحو التالي:
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
أوصاف المَعلمات
-
sessionهو XrSession سيتم فيه تفعيل أداة تتبُّع شبكة المشهد. -
createInfoهو مؤشر إلى بنية XrSceneMeshingTrackerCreateInfoANDROID المستخدَمة لوصف أداة تتبُّع شبكة المشهد المطلوب إنشاؤها. -
trackerهو مؤشر XrSceneMeshingTrackerANDROID الذي تم عرضه.
يمكن للتطبيق إنشاء مؤشر XrSceneMeshingTrackerANDROID باستخدام دالة xrCreateSceneMeshingTrackerANDROID.
إذا كان النظام لا يتيح استخدام شبكة المشهد، يجب أن يعرض وقت التشغيل XR_ERROR_FEATURE_UNSUPPORTED من xrCreateSceneMeshingTrackerANDROID . في هذه الحالة، يجب أن يعرض وقت التشغيل القيمة XR_FALSE لـ XrSystemSceneMeshingPropertiesANDROID :: supportsSceneMeshing عند استدعاء الدالة xrGetSystemProperties، حتى يتمكّن التطبيق من تجنُّب إنشاء أداة تتبُّع لشبكة المشهد.
يجب أن يستخدم التطبيق مجموعات التصنيفات الدلالية التي يتيحها النظام في XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet فقط عند إنشاء أداة تتبُّع شبكة المشهد. إذا كان التطبيق يستخدم مجموعة تصنيفات دلالية غير متوافقة لرؤوس شبكة المشهد، يجب أن يعرض وقت التشغيل XR_ERROR_FEATURE_UNSUPPORTED من xrCreateSceneMeshingTrackerANDROID .
يمكن للتطبيق تعداد قائمة مجموعات التصنيفات الدلالية المتوافقة باستخدام الدالة xrEnumerateSupportedSemanticLabelSetsANDROID.
يمتلك المقبض xrCreateSceneMeshingTrackerANDROID جميع الموارد اللازمة لإنشاء شبكة المشهد. بعد الانتهاء من تجربة شبكة المشهد، يجب أن يتلف التطبيق المقبض من خلال دالة xrDestroySceneMeshingTrackerANDROID.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استدعاء xrCreateSceneMeshingTrackerANDROID - يجب أن يكون
sessionاسم معرِّف XrSession صالحًا -
createInfoيجب أن يكون مؤشرًا إلى بنية XrSceneMeshingTrackerCreateInfoANDROID صالحة - يجب أن يكون
trackerمؤشرًا إلى مقبض XrSceneMeshingTrackerANDROID
رموز الإرجاع
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
يتم تحديد بنية XrSceneMeshingTrackerCreateInfoANDROID على النحو التالي:
typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet;
XrBool32 enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
semanticLabelSetهو XrSceneMeshSemanticLabelSetANDROID يُستخدَم لتحديد مجموعة التصنيفات الدلالية التي سيتم استخدامها لإنشاء شبكة المشهد. إذا تم ضبط هذه السمة علىXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID، سيتجاهل وقت التشغيل حقل المخزن المؤقت XrSceneSubmeshDataANDROID ::vertexSemantics. -
enableNormalsهوXrBool32يُستخدَم لتحديد ما إذا كان سيتم تضمين متجهات العمودية للرؤوس في مخزن شبكة المشهد المؤقت عند الحصول على بيانات شبكة المشهد.
تصف بنية XrSceneMeshingTrackerCreateInfoANDROID المعلومات اللازمة لإنشاء مؤشر XrSceneMeshingTrackerANDROID.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_scene_meshingقبل استخدام XrSceneMeshingTrackerCreateInfoANDROID - يجب أن يكون
typeXR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية -
semanticLabelSetيجب أن تكون قيمة XrSceneMeshSemanticLabelSetANDROID صالحة
يتم تعريف الدالة xrDestroySceneMeshingTrackerANDROID على النحو التالي:
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
أوصاف المَعلمات
-
trackerهو XrSceneMeshingTrackerANDROID تم إنشاؤه سابقًا بواسطة xrCreateSceneMeshingTrackerANDROID .
تُحرِّر الدالة xrDestroySceneMeshingTrackerANDROID المَعلمة tracker والموارد الأساسية عند الانتهاء من تجارب شبكة المشهد.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_scene_meshingقبل استدعاء xrDestroySceneMeshingTrackerANDROID -
trackerيجب أن يكون اسم معرِّف صالحًا لـ XrSceneMeshingTrackerANDROID
أمان Thread
- يجب مزامنة الوصول إلى
trackerوأي معرّفات فرعية خارجيًا
رموز الإرجاع
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
إنشاء معرّف لقطة لشبكة المشهد
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
يمثّل المقبض XrSceneMeshSnapshotANDROID لقطة لشبكة المشهد. يتم إنشاء هذه اللقطة باستخدام xrCreateSceneMeshSnapshotANDROID الذي يأخذ لقطة من بيانات شبكة المشهد في وقت استدعاء الدالة.
يمكن استخدام هذا الاسم المعرِّف لاسترداد معلومات وبيانات الشبكة الفرعية باستخدام xrGetAllSubmeshStatesANDROID وxrGetSubmeshDataANDROID .
يتم تعريف الدالة xrCreateSceneMeshSnapshotANDROID على النحو التالي:
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
أوصاف المَعلمات
-
trackerهو مؤشر XrSceneMeshingTrackerANDROID تم إنشاؤه سابقًا باستخدام xrCreateSceneMeshingTrackerANDROID . -
createInfoهو مؤشر إلى بنية XrSceneMeshSnapshotCreateInfoANDROID التي تحتوي على المعلومات اللازمة لإنشاء لقطة شبكة المشهد. -
outSnapshotCreationResultهو مؤشر إلى عنصر XrSceneMeshSnapshotCreationResultANDROID تتم تعبئته من خلال وقت التشغيل بنتيجة إنشاء اللقطة.
يمكن للتطبيق استخدام دالة xrCreateSceneMeshSnapshotANDROID لإنشاء لقطة لشبكة المشهد من أداة تتبُّع شبكة المشهد. تعرض هذه الدالة مؤشر XrSceneMeshSnapshotANDROID مع XrSceneMeshTrackingStateANDROID ضمن بنية XrSceneMeshSnapshotCreationResultANDROID. من الناحية الفنية، يمثّل المقبض نبذة عن بيانات شبكة المشهد في وقت الإنشاء. يمكن استخدام هذا الاسم المعرِّف لطلب معلومات وبيانات شبكة المشهد باستخدام xrGetAllSubmeshStatesANDROID وxrGetSubmeshDataANDROID على التوالي.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل طلب xrCreateSceneMeshSnapshotANDROID -
trackerيجب أن يكون اسم معرِّف صالحًا لـ XrSceneMeshingTrackerANDROID -
createInfoيجب أن يكون مؤشرًا إلى بنية XrSceneMeshSnapshotCreateInfoANDROID صالحة -
outSnapshotCreationResultيجب أن يكون مؤشرًا إلى بنية XrSceneMeshSnapshotCreationResultANDROID
رموز الإرجاع
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALID
يتم تحديد بنية XrSceneMeshSnapshotCreateInfoANDROID على النحو التالي:
typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrBoxf boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
baseSpaceهو XrSpace يتم فيه تمثيل معلومات وضعية الشبكة الفرعية للمشهد. -
timeهوXrTimeالذي يصف الوقت الذي ستتم فيه معالجة شبكة المشهد أو عرضها، وعادةً ما يكون XrFrameState ::predictedDisplayTime. -
boundingBoxهو XrBoxf يصف مربّع الإحاطة الذي يتم الحصول على شبكة المشهد داخله.
تصف بنية XrSceneMeshSnapshotCreateInfoANDROID المعلومات اللازمة لإنشاء مؤشر XrSceneMeshSnapshotANDROID
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استخدام XrSceneMeshSnapshotCreateInfoANDROID - يجب أن يكون
typeXR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
baseSpaceاسم معرِّف صالحًا على XrSpace
يتم تحديد بنية XrSceneMeshSnapshotCreationResultANDROID على النحو التالي:
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSnapshotANDROID snapshot;
XrSceneMeshTrackingStateANDROID trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
snapshotهو مؤشر XrSceneMeshSnapshotANDROID أنشأته بيئة التشغيل. -
trackingStateهو XrSceneMeshTrackingStateANDROID يصف حالة أداة تتبُّع شبكة المشهد في وقت إنشاء اللقطة.
تخزّن البنية XrSceneMeshSnapshotCreationResultANDROID نتيجة إنشاء لقطة لشبكة المشهد التي تم عرضها من xrCreateSceneMeshSnapshotANDROID .
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استخدام XrSceneMeshSnapshotCreationResultANDROID - يجب أن يكون
typeXR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن يكون
snapshotمؤشرًا صالحًا لـ XrSceneMeshSnapshotANDROID -
trackingStateيجب أن تكون قيمة XrSceneMeshTrackingStateANDROID صالحة
يصف التعداد XrSceneMeshTrackingStateANDROID حالة التتبُّع لأداة تتبُّع شبكة المشهد. تمثّل كل قيمة في هذا التعداد حالة أداة تتبُّع شبكة المشهد.
typedef enum XrSceneMeshTrackingStateANDROID {
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;
في ما يلي معاني قيم تعداد الخيارات:
وصف التعداد
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID
أداة التتبُّع ليست جاهزة بعد لتقديم بيانات الشبكة.
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID
جهاز التتبُّع يتتبّع الموقع الجغرافي حاليًا.
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID
ينتظر جهاز التتبُّع قياسات صالحة لدمجها منذ آخر تحديث للشبكة.
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID
لم يتلقَّ جهاز التتبُّع قياسات صالحة لعدة دورات، وهو في حالة خطأ.
وتُعدّ هذه الحالة معلومات إضافية للتطبيق فقط. في حال عدم وجود مصادر أخرى للأخطاء، يجب أن يستمر وقت التشغيل في السماح للتطبيق بإنشاء لقطات واسترداد البيانات منها بغض النظر عن الحالة الحالية لـ XrSceneMeshTrackingStateANDROID في أداة التتبُّع. إذا لم تكن الحالة XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID، قد لا تكون اللقطات محدّثة أو فارغة.
الحصول على بيانات شبكة المشهد من لقطة شبكة المشهد
يتم تعريف الدالة xrGetAllSubmeshStatesANDROID على النحو التالي:
XrResult xrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates);
أوصاف المَعلمات
-
snapshotهو مؤشر XrSceneMeshSnapshotANDROID تم إنشاؤه سابقًا باستخدام xrCreateSceneMeshSnapshotANDROID . -
submeshStateCapacityInputهي سعةsubmeshStates، أو 0 لاسترداد السعة المطلوبة. -
submeshStateCountOutputهو مؤشر إلى عددsubmeshStatesالمكتوبة، أو مؤشر إلى السعة المطلوبة في حال عدم كفايةsubmeshStateCapacityInput. -
submeshStatesهو مؤشر إلى مصفوفة من هياكل XrSceneSubmeshStateANDROID التي سيُخرج إليها وقت التشغيل حالة جميع الشبكات الفرعية في شبكة المشهد. يمكن أن تكون القيمةNULLإذا كانت قيمةsubmeshStateCapacityInputهي 0. - يُرجى الاطّلاع على فصل مَعلمات حجم ذاكرة التخزين المؤقت للحصول على وصف تفصيلي لاسترداد حجم
submeshStatesالمطلوب.
يمكن للتطبيق استخدام دالة xrGetAllSubmeshStatesANDROID للحصول على حالة جميع الشبكات الفرعية في شبكة المشهد. يحتوي هذا على معلومات أساسية للسماح للتطبيق باختيار الشبكات الفرعية التي يريد التطبيق الحصول على بيانات لها.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل طلب xrGetAllSubmeshStatesANDROID - يجب أن يكون
snapshotمؤشرًا صالحًا لـ XrSceneMeshSnapshotANDROID - يجب أن يكون
submeshStateCountOutputمؤشرًا إلى قيمةuint32_t - إذا لم تكن قيمة
submeshStateCapacityInputهي0، يجب أن تكون قيمةsubmeshStatesمؤشرًا إلى مصفوفة من هياكلsubmeshStateCapacityInputXrSceneSubmeshStateANDROID
رموز الإرجاع
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
يتم تحديد بنية XrSceneSubmeshStateANDROID على النحو التالي:
typedef struct XrSceneSubmeshStateANDROID {
XrStructureType type;
void* next;
XrUuid submeshId;
XrTime lastUpdatedTime;
XrPosef submeshPoseInBaseSpace;
XrExtent3Df bounds;
} XrSceneSubmeshStateANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
submeshIdهو XrUuid يحدّد الشبكة الفرعية. -
lastUpdatedTimeهوXrTimeيمثّل وقت آخر تعديل للشبكة الفرعية. -
submeshPoseInBaseSpaceهو XrPosef يمثّل وضعية الشبكة الفرعية في المساحة الأساسية المستخدَمة لإنشاء لقطة شبكة المشهد. وتكون الوضعية أيضًا في منتصف المربّع المحيط بالشبكة الفرعية. -
boundsهو XrExtent3Df يصف أبعاد مربّع الإحاطة الذي يحيط بالشبكة الفرعية. يتم تحديد هذه الحدود في المساحة الأساسية التي تم استخدامها لإنشاء مؤشر شبكة المشهد.
يبذل وقت التشغيل قصارى جهده لربط submeshId بمنطقة المساحة المادية التي تشغلها الشبكة الفرعية. قد تفقد بيئات التشغيل هذه عملية الربط في أي وقت وتعيّن معرّف UUID جديدًا لأي مجموعة فرعية من الشبكات الفرعية التي تم رصدها. على وجه الخصوص، لا يُشترط أن تعيد بيئات التشغيل استخدام معرّفات UUID نفسها للشبكات نفسها في نُسخ التطبيق اللاحقة.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استخدام XrSceneSubmeshStateANDROID - يجب أن يكون
typeXR_TYPE_SCENE_SUBMESH_STATE_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية
يتم تعريف الدالة xrGetSubmeshDataANDROID على النحو التالي:
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
أوصاف المَعلمات
-
snapshotهو مؤشر XrSceneMeshSnapshotANDROID تم إنشاؤه سابقًا باستخدام xrCreateSceneMeshSnapshotANDROID . -
submeshDataCountهو طولinoutSubmeshData. -
inoutSubmeshDataهي مصفوفة مخصّصة للتطبيق من XrSceneSubmeshDataANDROID يملأ فيها وقت التشغيل كل عنصر ببيانات الشبكة المرتبطة بمعرّف الشبكة الفرعية الذي تم تمريره في XrSceneSubmeshDataANDROID ::submeshId.
يمكن للتطبيق استخدام الدالة xrGetSubmeshDataANDROID للحصول على مجموعات من الشبكات الفرعية أو جميع الشبكات الفرعية في آنٍ واحد، وذلك من خلال تمرير قائمة من XrSceneSubmeshDataANDROID مع ضبط كل XrSceneSubmeshDataANDROID :: submeshId على رقم التعريف المعنيّ للشبكة الفرعية المطلوب استردادها.
يجب أن يكون XrSceneSubmeshDataANDROID :: submeshId فريدًا لكل عنصر في inoutSubmeshData ويمكن استرداده من خلال xrGetAllSubmeshStatesANDROID لـ snapshot نفسه. إذا كان معرّف الشبكة الفرعية غير صالح أو كان هناك أكثر من عنصر في inoutSubmeshData له معرّف الشبكة الفرعية نفسه، يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE .
يجب أن تكون قيمة submeshDataCount مساوية للقيمة التي تعرضها الدالة xrGetAllSubmeshStatesANDROID :: submeshStateCountOutput أو أقل منها، وإلا يجب أن يعرض وقت التشغيل القيمة XR_ERROR_VALIDATION_FAILURE .
يمكن استخدام هذه الدالة في تعبير برمجي من طلبَين للاستعلام عن عدد الرؤوس والفهارس لجميع الشبكات الفرعية المحدّدة.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_scene_meshingقبل استدعاء xrGetSubmeshDataANDROID - يجب أن يكون
snapshotمؤشرًا صالحًا لـ XrSceneMeshSnapshotANDROID - يجب أن يكون
inoutSubmeshDataمؤشرًا إلى مصفوفة من هياكلsubmeshDataCountXrSceneSubmeshDataANDROID - يجب أن تكون المَعلمة
submeshDataCountأكبر من0
رموز الإرجاع
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
يتم تحديد بنية XrSceneSubmeshDataANDROID على النحو التالي:
typedef struct XrSceneSubmeshDataANDROID {
XrStructureType type;
const void* next;
XrUuid submeshId;
uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector3f* vertexPositions;
XrVector3f* vertexNormals;
uint8_t* vertexSemantics;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t* indices;
} XrSceneSubmeshDataANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى. لا يتم تحديد مثل هذه البُنى في OpenXR الأساسية أو هذه الإضافة. -
submeshIdهو XrUuid يحدّد الشبكة الفرعية. -
vertexCapacityInputهي سعةvertexPositionsوvertexNormalsوvertexSemantics، أو 0 لاسترداد السعة المطلوبة. -
vertexCountOutputهو مؤشر لعددvertexPositionsوvertexNormalsوvertexSemanticsالمكتوبة، أو مؤشر للسعة المطلوبة في حال عدم كفايةvertexCapacityInput. -
vertexPositionsهي مصفوفة من XrVector3f سيُخرج وقت التشغيل إليها مواضع رؤوس الشبكة الفرعية. -
vertexNormalsهي مصفوفة من XrVector3f سيُخرج وقت التشغيل إليها المتجهات العمودية للرؤوس في الشبكة الفرعية. يمكن ترك هذا الحقلNULLإذا أنشأ التطبيق أداة تتبُّع مع إيقاف ميزة "المتتبّعات العادية". -
vertexSemanticsهي مصفوفة منuint8_tسيُخرج إليها وقت التشغيل دلالات الرؤوس للشبكة الفرعية. يمكن ترك هذا الحقلNULLإذا أنشأ التطبيق أداة تتبُّع باستخدام تصنيف دلاليXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID. -
indexCapacityInputهي سعةindices، أو 0 لاسترداد السعة المطلوبة. -
indexCountOutputهو مؤشر إلى عددindicesالمكتوبة، أو مؤشر إلى السعة المطلوبة في حال عدم كفايةvertexCapacityInput. -
indicesهي مصفوفة منuint32_tسيُخرج وقت التشغيل إليها فهارس الشبكة الفرعية. - يُرجى الاطّلاع على فصل مَعلمات حجم ذاكرة التخزين المؤقت للحصول على وصف تفصيلي لاسترداد حجم
vertexPositionsوvertexNormalsوvertexSemanticsوindicesالمطلوب.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استخدام XrSceneSubmeshDataANDROID - يجب أن يكون
typeXR_TYPE_SCENE_SUBMESH_DATA_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - إذا لم تكن قيمة
vertexCapacityInputهي0، يجب أن تكون قيمةvertexPositionsمؤشرًا إلى مصفوفة من هياكلvertexCapacityInputXrVector3f - إذا لم تكن قيمة
vertexCapacityInputهي0، يجب أن تكون قيمةvertexNormalsمؤشرًا إلى مصفوفة من هياكلvertexCapacityInputXrVector3f - إذا لم تكن قيمة
vertexCapacityInputهي0، يجب أن تكون قيمةvertexSemanticsمؤشرًا إلى مصفوفة من قيمvertexCapacityInputuint8_t - إذا لم تكن قيمة
indexCapacityInputهي0، يجب أن تكون قيمةindicesمؤشرًا إلى مصفوفة من قيمindexCapacityInputuint32_t
التعداد XrSceneMeshSemanticLabelANDROID هو المجموعة التلقائية من التصنيفات الدلالية التي يمكن استخدامها لتصنيف رؤوس الشبكة لوصف سطح البيئة المادية الذي يقع عليه رأس الشبكة. يتم تمثيل مجموعة التعداد هذه بالقيمة XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID في XrSceneMeshSemanticLabelSetANDROID .
typedef enum XrSceneMeshSemanticLabelANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;
تحمل التعدادات المعاني التالية:
وصف التعداد
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID
يشير هذا التصنيف الدلالي إلى أنّ عنصر الشبكة المقابل يمثّل جسمًا غير معروف.
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID
يشير هذا التصنيف الدلالي إلى أنّ عنصر الشبكة المقابل يمثّل أرضية.
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID
يشير هذا التصنيف الدلالي إلى أنّ عنصر الشبكة المقابل يمثّل سقفًا.
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID
يشير هذا التصنيف الدلالي إلى أنّ عنصر الشبكة المقابل يمثّل جدارًا.
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID
يشير هذا التصنيف الدلالي إلى أنّ عنصر الشبكة المقابل يمثّل طاولة.
تدمير لقطة شبكة المشهد
يتم تعريف الدالة xrDestroySceneMeshSnapshotANDROID على النحو التالي:
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
أوصاف المَعلمات
-
snapshotهو مؤشر XrSceneMeshSnapshotANDROID تم إنشاؤه سابقًا باستخدام xrCreateSceneMeshSnapshotANDROID وسيتم تدميره من خلال هذه الدالة.
يمكن للتطبيق استخدام الدالة xrDestroySceneMeshSnapshotANDROID لإتلاف لقطة شبكة المشهد. بعد تدمير المقبض، لن يتمكّن التطبيق من استخدامه للحصول على معلومات أو بيانات الشبكة الفرعية. يتم تدمير المقبض تلقائيًا عند تدمير أداة التتبُّع لأنّ مقبض أداة التتبُّع هو العنصر الرئيسي لمقبض لقطة شبكة المشهد.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_scene_meshingقبل استدعاء xrDestroySceneMeshSnapshotANDROID - يجب أن يكون
snapshotمؤشرًا صالحًا لـ XrSceneMeshSnapshotANDROID
أمان Thread
- يجب مزامنة الوصول إلى
snapshotوأي معرّفات فرعية خارجيًا
رموز الإرجاع
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
مثال على الرمز البرمجي لإنشاء شبكة المشهد
يوضّح الرمز النموذجي التالي كيفية الوصول إلى بيانات شبكة المشهد لعرضها.
XrInstance instance; // Created at app startup
XrSystemId systemId; // Received from xrGetSystem() at app startup
XrSession session; // Created at app startup
XrSpace appPlaySpace; // Created at app startup
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;
// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
.type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
// scene meshing is not supported.
return;
}
uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, supportedsemanticLabelSetsCount,
&supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
supportedSemanticLabelSets.end()) {
semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}
XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
.type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
.semanticLabelSet = semanticLabelSet,
.enableNormals = XR_TRUE
};
XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));
XrSceneMeshSnapshotCreationResultANDROID snapshotResult {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
.snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};
// app update loop
while (true) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrBoxf box; // populated with the bounding box of the camera frustum
// ...
createInfo.baseSpace = appPlaySpace;
createInfo.time = time;
createInfo.boundingBox = box;
// Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
// choose the appropriate submeshes for which to get data, allocate the necessary
// buffer for those submeshes, and then get the data.
CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));
// check the tracking state
if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
// unrecoverable error. Exit the app.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
break;
} else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
// The tracker is not tracking. Try again later.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
continue;
}
// 2-call idiom for getting submesh states
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
std::vector<XrSceneSubmeshStateANDROID> states(submeshCount, {
.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID,
});
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));
// To store the poses for the selected submeshes
std::vector<XrPosef> submeshesPoses;
submeshesPoses.reserve(submeshCount);
std::vector<XrSceneSubmeshDataANDROID> submeshes;
submeshes.reserve(submeshCount);
// Iterate the states and determine which submeshes the app wants data for
for (XrSceneSubmeshStateANDROID& state : states) {
// Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
// is below a threshold or maybe the bounding box does not intersect with camera view
// frustum (The submesh will be culled).
bool needed;
if (needed) {
// Add the selected submesh to the submeshes list. Set the capacity
// zero for now since the size of the buffer will be determined later.
XrSceneSubmeshDataANDROID submesh {
.type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
.submeshId = state.submeshId,
.vertexCapacityInput = 0,
.vertexCountOutput = 0,
.vertexPositions = nullptr,
.vertexNormals = nullptr,
.vertexSemantics = nullptr,
.indexCapacityInput = 0,
.indexCountOutput = 0,
.indices = nullptr,
};
submeshes.push_back(submesh);
submeshesPoses.push_back(state.submeshPoseInBaseSpace);
}
}
// Grab the data for the selected submeshes using the 2-call idiom.
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
submesh.vertexCapacityInput = submesh.vertexCountOutput;
submesh.vertexCountOutput = 0;
submesh.vertexPositions = new XrVector3f[submesh.vertexCapacityInput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCapacityInput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCapacityInput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCapacityInput];
}
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
// Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
// next iteration app can: create a new one to get latest mesh data
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
// Iterate the submeshes and get the vertex positions, vertex normals and
// vertex semantics data for the selected submeshes
for (uint32_t i = 0; i < submeshes.size(); i++) {
XrSceneSubmeshDataANDROID& data = submeshes[i];
XrVector3f* vertexPositions = data.vertexPositions;
XrVector3f* vertexNormals = data.vertexNormals;
XrSceneMeshSemanticLabelANDROID* vertexSemantics =
new XrSceneMeshSemanticLabelANDROID[data.vertexCountOutput];
for (uint32_t j = 0; j < data.vertexCountOutput; j++) {
vertexSemantics[j] =
static_cast<XrSceneMeshSemanticLabelANDROID>(data.vertexSemantics[j]);
}
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] vertexSemantics;
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
أنواع العناصر الجديدة
الأوامر الجديدة
- xrCreateSceneMeshSnapshotANDROID
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
منشآت جديدة
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneSubmeshDataANDROID
- XrSceneSubmeshStateANDROID
توسيع XrSystemProperties :
عمليات تعداد جديدة
ثوابت تعداد جديدة
XR_ANDROID_SCENE_MESHING_EXTENSION_NAMEXR_ANDROID_scene_meshing_SPEC_VERSIONتوسيع XrObjectType :
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROIDXR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
توسيع XrStructureType :
XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROIDXR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROIDXR_TYPE_SCENE_SUBMESH_DATA_ANDROIDXR_TYPE_SCENE_SUBMESH_STATE_ANDROIDXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
المشاكل
سجلّ الإصدارات
المراجعة 3، بتاريخ 15 مايو 2025 (سالار خان)
- الوصف الأولي للإضافة