مشبندی صحنه XR_ANDROID
رشته نام
XR_ANDROID_scene_meshing
نوع افزونه
افزونه نمونه
شماره داخلی ثبت شده
719
بازنگری
۳
وضعیت تصویب
تصویب نشده
وابستگیهای افزونه و نسخه
آخرین تاریخ اصلاح
۲۰۲۵-۰۵-۱۵
وضعیت آیپی
هیچ ادعای مالکیت معنوی شناختهشدهای وجود ندارد.
مشارکتکنندگان
اسپنسر کوئین، گوگل
جارد فایندر، گوگل
آنتونیو فونتان، گوگل
کایرن اوورترف، گوگل
نیهاو جین، گوگل
سالار خان، گوگل
سباستین کلوزه، گوگل
یورگن اشتورم، گوگل
وینی داسیلوا، گوگل
ریکاردو کمپبل، گوگل
نمای کلی
این افزونه برای ارائه شبکههایی در نظر گرفته شده است که تقریباً نمایانگر اشیاء فیزیکی در محیط کاربر هستند.
برنامهها میتوانند از این افزونه برای تجسم صحنه و ایجاد تعامل اشیاء مجازی با اشیاء فیزیکی مانند برخوردها استفاده کنند.
دادههای مش صحنه توسط زمان اجرا تولید شده و با استفاده از XrSceneMeshingTrackerANDROID و XrSceneMeshSnapshotANDROID با برنامه به اشتراک گذاشته میشود. برنامهها میتوانند از طریق XrSceneSubmeshStateANDROID که از xrGetAllSubmeshStatesANDROID برگردانده میشود، به مقادیر موجود در اطلاعات زیرمش صحنه دسترسی داشته باشند. برنامهها میتوانند از طریق XrSceneSubmeshDataANDROID که از xrGetSubmeshDataANDROID برگردانده میشود، به مقادیر موجود در دادههای زیرمش صحنه دسترسی داشته باشند.
دادههای مشبندی صحنه، اطلاعات شخصی حساسی هستند و ارتباط نزدیکی با حریم خصوصی و یکپارچگی شخصی دارند. اکیداً توصیه میشود برنامههایی که دادههای مشبندی صحنه را ذخیره یا منتقل میکنند، همیشه از کاربر اجازه فعال و خاص برای انجام این کار را بخواهند.
مجوزها
برنامههای اندروید باید مجوز 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 ، بررسی کند که آیا سیستم قادر به مشبندی صحنه است یا خیر.
اگر یک زمان اجرا برای supportsSceneMeshing XR_FALSE را برگرداند، سیستم از مشبندی صحنه پشتیبانی نمیکند و بنابراین باید XR_ERROR_FEATURE_UNSUPPORTED از xrCreateSceneMeshingTrackerANDROID برگرداند. برنامه باید از استفاده از قابلیت مشبندی صحنه هنگامی که supportsSceneMeshing XR_FALSE دارد، خودداری کند.
اگر یک زمان اجرا برای supportsSceneMeshing XR_TRUE را برگرداند، سیستم از مشبندی صحنه پشتیبانی میکند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از استفاده از XrSystemSceneMeshingPropertiesANDROID فعال شود. -
typeبایدXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد.
شمارش XrSceneMeshSemanticLabelSetANDROID مجموعههای برچسب معنایی را برای مشبندی صحنه توصیف میکند. هر مقدار در این enum نشاندهنده enum دیگری است که شامل برچسبهای معنایی است. برای مثال، مقدار 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 است. اگرsupportedSemanticLabelSetsInputCapacityبرابر با ۰ باشد، میتواندNULLباشد. - برای شرح مفصلی از بازیابی اندازه مورد نیاز
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_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_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 برگردانده شده است.
یک برنامه میتواند با استفاده از تابع xrCreateSceneMeshingTrackerANDROID یک هندل XrSceneMeshingTrackerANDROID ایجاد کند.
اگر سیستم از شبکهبندی صحنه پشتیبانی نکند، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED از xrCreateSceneMeshingTrackerANDROID برگرداند. در این حالت، زمان اجرا باید هنگام فراخوانی تابع xrGetSystemProperties XR_FALSE برای XrSystemSceneMeshingPropertiesANDROID :: supportsSceneMeshing برگرداند تا برنامه بتواند از ایجاد ردیاب شبکهبندی صحنه جلوگیری کند.
برنامه هنگام ایجاد ردیاب مشبندی صحنه، فقط باید از مجموعه برچسبهای معنایی پشتیبانیشده توسط سیستم در XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet استفاده کند. اگر برنامه از یک مجموعه برچسب معنایی رأس مشبندی صحنه پشتیبانینشده استفاده کند، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED از xrCreateSceneMeshingTrackerANDROID برگرداند.
برنامه میتواند فهرست مجموعههای برچسب معنایی پشتیبانیشده را با تابع xrEnumerateSupportedSemanticLabelSetsANDROID فهرست کند.
هندل xrCreateSceneMeshingTrackerANDROID تمام منابع لازم برای مشبندی صحنه را در اختیار دارد. پس از پایان تجربه مشبندی صحنه، برنامه باید هندل را از طریق تابع xrDestroySceneMeshingTrackerANDROID از بین ببرد.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از فراخوانی xrCreateSceneMeshingTrackerANDROID فعال شود. -
sessionباید یک دسته XrSession معتبر باشد -
createInfoباید یک اشارهگر به ساختار معتبر XrSceneMeshingTrackerCreateInfoANDROID باشد. -
trackerباید یک اشارهگر به یک هندل XrSceneMeshingTrackerANDROID باشد
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_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 فعال باشد. -
typeبایدXR_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_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_RUNTIME_FAILURE
ایجاد دسته عکس فوری مش صحنه
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
شناسه XrSceneMeshSnapshotANDROID نشاندهنده یک تصویر لحظهای از مش صحنه است. این تصویر لحظهای با استفاده از xrCreateSceneMeshSnapshotANDROID ایجاد میشود که در زمان فراخوانی تابع، یک تصویر لحظهای از دادههای مش صحنه میگیرد.
این هندل میتواند برای بازیابی اطلاعات و دادههای submesh با استفاده از xrGetAllSubmeshStatesANDROID و xrGetSubmeshDataANDROID استفاده شود.
تابع xrCreateSceneMeshSnapshotANDROID به صورت زیر تعریف شده است:
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
توضیحات پارامتر
-
trackerیک شناسه XrSceneMeshingTrackerANDROID است که قبلاً با xrCreateSceneMeshingTrackerANDROID ایجاد شده است. -
createInfoاشارهگری به ساختار XrSceneMeshSnapshotCreateInfoANDROID است که شامل اطلاعات لازم برای ایجاد snapshot مش صحنه است. -
outSnapshotCreationResultیک اشارهگر به یک شیء XrSceneMeshSnapshotCreationResultANDROID است که توسط زمان اجرا با نتیجه ایجاد اسنپشات پر میشود.
برنامه میتواند از تابع xrCreateSceneMeshSnapshotANDROID برای ایجاد یک تصویر لحظهای از مش صحنه از ردیاب مش صحنه استفاده کند. این تابع یک هندل XrSceneMeshSnapshotANDROID به همراه XrSceneMeshTrackingStateANDROID که در ساختار XrSceneMeshSnapshotCreationResultANDROID قرار گرفته است، برمیگرداند. این هندل از نظر فنی یک تصویر لحظهای از دادههای مش صحنه در زمان ایجاد است. از این هندل میتوان برای جستجوی اطلاعات و دادههای مش صحنه به ترتیب با استفاده از xrGetAllSubmeshStatesANDROID و xrGetSubmeshDataANDROID استفاده کرد.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از فراخوانی xrCreateSceneMeshSnapshotANDROID فعال شود. -
trackerباید یک شناسه معتبر XrSceneMeshingTrackerANDROID باشد -
createInfoباید یک اشارهگر به ساختار معتبر XrSceneMeshSnapshotCreateInfoANDROID باشد. -
outSnapshotCreationResultباید یک اشارهگر به ساختار XrSceneMeshSnapshotCreationResultANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_POSE_INVALID -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_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 است که اطلاعات مربوط به حالت submesh صحنه در آن نمایش داده میشود. -
timeهمانXrTimeاست که زمانی را که مش صحنه پردازش یا نمایش داده میشود، توصیف میکند و معمولاً XrFrameState ::predictedDisplayTime. -
boundingBoxیک XrBoxf است که کادر مرزی را که مش صحنه در آن قرار میگیرد، توصیف میکند.
ساختار XrSceneMeshSnapshotCreateInfoANDROID اطلاعات لازم برای ایجاد یک هندل XrSceneMeshSnapshotANDROID را توصیف میکند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از استفاده از XrSceneMeshSnapshotCreateInfoANDROID فعال باشد. -
typeبایدXR_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 فعال باشد. -
typeبایدXR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
snapshotباید یک شناسه معتبر XrSceneMeshSnapshotANDROID باشد. -
trackingStateباید یک مقدار معتبر XrSceneMeshTrackingStateANDROID باشد.
شمارش XrSceneMeshTrackingStateANDROID وضعیت ردیابی را برای یک ردیاب مشبندی صحنه توصیف میکند. هر مقدار در این enum نشان دهنده یک وضعیت از ردیاب مشبندی صحنه است.
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 است که در زمان اجرا، وضعیت تمام زیرمشها در مش صحنه را به آن نمایش میدهد. اگرsubmeshStateCapacityInputبرابر با ۰ باشد، میتواندNULLباشد. - برای توضیحات مفصل در مورد بازیابی اندازه
submeshStatesمورد نیاز، به فصل پارامترهای اندازه بافر مراجعه کنید.
برنامه میتواند از تابع xrGetAllSubmeshStatesANDROID برای دریافت وضعیت تمام زیرشبکهها در مش صحنه استفاده کند. این تابع حاوی اطلاعات اولیهای است که به برنامه اجازه میدهد زیرشبکههایی را که برای آنها داده میخواهد، انتخاب کند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از فراخوانی xrGetAllSubmeshStatesANDROID فعال شود. -
snapshotباید یک شناسه معتبر XrSceneMeshSnapshotANDROID باشد. -
submeshStateCountOutputباید یک اشارهگر به مقدارuint32_tباشد. - اگر
submeshStateCapacityInputبرابر با0نباشد،submeshStatesباید اشارهگری به آرایهای از ساختارهایsubmeshStateCapacityInputXrSceneSubmeshStateANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_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 است که ابعاد کادر مرزی که submesh را در بر میگیرد، توصیف میکند. این bounds در فضای پایهای که برای ایجاد دسته مش صحنه استفاده شده است، تعریف میشود.
زمان اجرا تمام تلاش خود را میکند تا submeshId با ناحیه فضای فیزیکی اشغال شده توسط submesh نگاشت کند. زمانهای اجرا ممکن است در هر زمانی این نگاشت را از دست بدهند و یک UUID جدید به هر زیرمجموعه از زیرمشهای شناسایی شده اختصاص دهند. به طور خاص، زمانهای اجرا ملزم به استفاده مجدد از UUIDهای مشابه برای مشهای مشابه در نمونههای بعدی برنامه نیستند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از استفاده از XrSceneSubmeshStateANDROID فعال شود. -
typeبایدXR_TYPE_SCENE_SUBMESH_STATE_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد.
تابع xrGetSubmeshDataANDROID به صورت زیر تعریف میشود:
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
توضیحات پارامتر
-
snapshotیک شناسه XrSceneMeshSnapshotANDROID است که قبلاً با xrCreateSceneMeshSnapshotANDROID ایجاد شده است. -
submeshDataCountطولinoutSubmeshDataاست. -
inoutSubmeshDataیک آرایه اختصاص داده شده به برنامه از XrSceneSubmeshDataANDROID است که در آن زمان اجرا هر عنصر را با دادههای مش مرتبط با شناسه submesh ارسال شده در XrSceneSubmeshDataANDROID ::submeshIdپر میکند.
برنامه میتواند از تابع xrGetSubmeshDataANDROID برای دریافت دستههایی از زیرمشها یا همه زیرمشها به طور همزمان استفاده کند، این کار با ارسال لیستی از XrSceneSubmeshDataANDROID انجام میشود که در آن هر XrSceneSubmeshDataANDROID :: submeshId روی شناسه مربوطه زیرمشی که قرار است بازیابی شود، تنظیم شده است.
شناسهی XrSceneSubmeshDataANDROID :: submeshId باید برای هر عنصر در inoutSubmeshData منحصر به فرد باشد و توسط xrGetAllSubmeshStatesANDROID برای همان snapshot قابل بازیابی باشد. اگر شناسهی submesh نامعتبر باشد یا بیش از یک عنصر در inoutSubmeshData شناسهی submesh یکسانی داشته باشند، آنگاه زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
submeshDataCount باید مساوی یا کمتر از مقداری باشد که توسط xrGetAllSubmeshStatesANDROID :: submeshStateCountOutput برگردانده میشود، در غیر این صورت زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
این میتواند در یک اصطلاح دو فراخوانی برای پرسوجوی تعداد رأس و شاخص برای همه زیرشبکههای انتخابشده استفاده شود.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از فراخوانی xrGetSubmeshDataANDROID فعال شود. snapshotباید یک شناسه معتبر XrSceneMeshSnapshotANDROID باشد.-
inoutSubmeshDataباید یک اشارهگر به آرایهای از ساختارهایsubmeshDataCountXrSceneSubmeshDataANDROID باشد. - پارامتر
submeshDataCountباید بزرگتر از0باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_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است که زمان اجرا، معنای رأس زیرمش را به آن خروجی میدهد. اگر برنامه یک ردیاب با مجموعه برچسب معناییXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROIDایجاد کرده باشد، میتوان این فیلد راNULLگذاشت. -
indexCapacityInputظرفیتindicesاست، یا برای بازیابی ظرفیت مورد نیاز، 0 است. -
indexCountOutputاشارهگری به تعدادindicesنوشته شده یا اشارهگری به ظرفیت مورد نیاز در صورتی کهvertexCapacityInputکافی نباشد، میباشد. -
indices آرایهای ازuint32_tاست که زمان اجرا، شاخصهای زیرمش را به آن خروجی میدهد. - برای شرح مفصلی از بازیابی
vertexPositions،vertexNormals،vertexSemanticsو اندازهindicesمورد نیاز، به فصل «پارامترهای اندازه بافر» مراجعه کنید.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از استفاده از XrSceneSubmeshDataANDROID فعال شود. -
typeبایدXR_TYPE_SCENE_SUBMESH_DATA_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. - اگر
vertexCapacityInputبرابر با0نباشد،vertexPositionsباید اشارهگری به آرایهای از ساختارهایvertexCapacityInputXrVector3f باشد. - اگر
vertexCapacityInputبرابر با0نباشد،vertexNormalsباید اشارهگری به آرایهای از ساختارهایvertexCapacityInputXrVector3f باشد. - اگر
vertexCapacityInputبرابر با0نباشد،vertexSemanticsباید یک اشارهگر به آرایهای از مقادیرvertexCapacityInputuint8_tباشد. - اگر
indexCapacityInputبرابر با0نباشد،indicesباید اشارهگری به آرایهای از مقادیرuint32_tindexCapacityInputباشند.
شمارش 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;
enum ها معانی زیر را دارند:
توضیحات شمارشی
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 برای از بین بردن یک snapshot مش صحنه استفاده کند. پس از از بین رفتن handle، برنامه دیگر نمیتواند از آن برای دریافت اطلاعات یا دادههای submesh استفاده کند. handle به طور خودکار با از بین رفتن tracker از بین میرود زیرا handle ردیاب، والد handle snapshot مش صحنه است.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_scene_meshingباید قبل از فراخوانی xrDestroySceneMeshSnapshotANDROID فعال شود. -
snapshotباید یک شناسه معتبر XrSceneMeshSnapshotANDROID باشد.
ایمنی رزوه
- دسترسی به
snapshotو هر دسته فرزندی باید به صورت خارجی هماهنگسازی شود.
کدهای بازگشت
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_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
سازههای جدید
- XrSceneMeshSnapshotCreateInfoاندروید
- XrSceneMeshSnapshotCreationResultاندروید
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneSubmeshData اندروید
- XrSceneSubmeshStateANDROID
بسط XrSystemProperties :
Enum های جدید
- برچسب معنایی XrSceneMesh اندروید
- XrSceneMeshSemanticLabelSet اندروید
- ردیابی وضعیت در XrSceneMesh اندروید
ثابتهای شمارشی جدید
-
XR_ANDROID_SCENE_MESHING_EXTENSION_NAME -
XR_ANDROID_scene_meshing_SPEC_VERSION بسط XrObjectType :
-
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID -
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
-
گسترش XrStructureType :
-
XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID -
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID -
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID -
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID -
XR_TYPE_SCENE_SUBMESH_STATE_ANDROID -
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
-
مسائل
تاریخچه نسخه
نسخه ۳، ۲۰۲۵-۰۵-۱۵ (سالار خان)
- توضیحات اولیه افزونه