XR_ANDROID_scene_meshing
سلسلة الاسم
XR_ANDROID_scene_meshing
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
719
المراجعة
3
حالة التصديق
لم تتم المصادقة
الاعتماديات على الإضافات والإصدارات
تاريخ آخر تعديل
2025-05-15
حالة عنوان IP
ما مِن مطالبات معروفة بملكية الملكية الفكرية.
المساهمون
Spencer Quin، Google
Jared Finder، Google
Antonio Fontan، Google
Cairn Overturf، Google
Nihav Jain، Google
Salar Khan، Google
Sebastian Klose، Google
Jürgen Sturm، Google
Vinny DaSilva، Google
Ricardo Campbell، 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_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;
تحمل قيم التعداد المعاني التالية:
وصف التعداد
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
تمثّل مجموعة التصنيفات الدلالية هذه عدم توفّر تصنيفات دلالية.
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
تمثّل مجموعة التصنيفات الدلالية هذه XrSceneMeshSemanticLabelANDROID.
يتم تعريف الدالة 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، سيتجاهل وقت التشغيل حقل المخزن المؤقتvertexSemanticsفي XrSceneSubmeshDataANDROID. 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
أمان سلاسل المحادثات
- يجب مزامنة حساب
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 صالحة
أمان سلاسل المحادثات
- يجب مزامنة حساب
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-05-2025 (سار خان)
- الوصف الأوّلي للإضافة