رشته نام XR_ANDROID_scene_meshing
پسوند نمونه نوع پسوند
شماره پسوند ثبت شده 464
ویرایش 3
افزونه ها و وابستگی های نسخه OpenXR 1.0
آخرین تاریخ اصلاح 2025-05-15
وضعیت IP هیچ ادعای 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
نمای کلی
این برنامه افزودنی برای ارائه داده های مش برای مش ها در نظر گرفته شده است که تقریباً اشیاء فیزیکی در محیط شما را نشان می دهد. می توان از آن برای تجسم صحنه شما در یک برنامه غوطه ور استفاده کرد و به اشیاء مجازی اجازه می دهد با اشیاء فیزیکی مانند برخوردها تعامل داشته باشند.
داده های مش بندی صحنه می تواند اطلاعات شخصی حساس باشد و ارتباط نزدیکی با حریم خصوصی و یکپارچگی شخصی دارد. اکیداً توصیه میشود که برنامههایی که دادههای مشبک صحنه را ذخیره یا انتقال میدهند، همیشه از کاربر درخواست پذیرش فعال و خاص برای انجام این کار را داشته باشند.
مجوزها
برنامههای Android باید مجوز android.permission.SCENE_UNDERSTANDING_FINE را که در مانیفست آنها فهرست شده است داشته باشند. مجوز android.permission.SCENE_UNDERSTANDING_FINE یک مجوز حساس در نظر گرفته می شود زیرا به زمان اجرا اجازه می دهد تا محیط کاربر را مطالعه کند.
برنامه برای استفاده از این توابع باید در زمان اجرا مجوز درخواست کند:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(سطح حفاظت: خطرناک)
قابلیت سیستم را بررسی کنید
هنگام فراخوانی xrGetSystemProperties، یک برنامه کاربردی می تواند بررسی کند که آیا سیستم قادر به مش بندی صحنه است یا خیر.
XrSystemSceneMeshingPropertiesANDROID
typedef struct XrSystemSceneMeshingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
supportsSceneMeshingیک XrBool32 است که نشان می دهد آیا سیستم از مش بندی صحنه پشتیبانی می کند یا خیر.
اگر supportsSceneMeshing XR_FALSE باشد، سیستم از مش بندی صحنه پشتیبانی نمی کند. هنگامی که supportsSceneMeshing XR_FALSE است، برنامه باید از استفاده از عملکرد مشبک صحنه اجتناب کند، زیرا تماس با xrCreateSceneMeshingTrackerANDROID ناموفق خواهد بود.
اگر supportsSceneMeshing XR_TRUE باشد، سیستم از مش بندی صحنه پشتیبانی می کند.
استفاده معتبر (ضمنی)
- پسوند
XR_ANDROID_scene_meshingباید قبل از استفاده از XrSystemSceneMeshingPropertiesANDROID فعال شود -
typeبایدXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROIDباشد -
nextبایدNULLیا یک اشاره گر معتبر به ساختار بعدی در یک زنجیره ساختار باشد
XrSceneMeshSemanticLabelSetANDROID
شمارش 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;
xrEnumerateSupportedSemanticLabelSetsANDROID
این برنامه میتواند مجموعههای برچسب معنایی پشتیبانی شده توسط سیستم را با استفاده از تابع xrEnumerateSupportedSemanticLabelSetsANDROID دریافت کند.
XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets);
توضیحات پارامترها
-
instanceیک XrInstance است که توسط برنامه ایجاد شده است. -
systemIdیک XrSystemId است که از xrGetSystem دوباره امتحان شده است. -
supportedSemanticLabelSetsInputCapacityطولsupportedSemanticLabelSetsاست. -
supportedSemanticLabelSetsOutputCountتعداد عناصر موجود درsupportedSemanticLabelSetsاست که توسط زمان اجرا از ابتدای آرایه شروع می شود. -
supportedSemanticLabelSetsآرایهای از XrSceneMeshSemanticLabelSetANDROID است که مجموعههای برچسب معنایی پشتیبانی شده توسط زمان اجرا روی آن نوشته میشوند.
انتظار می رود که هر سیستم حداقل از XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID پشتیبانی کند زیرا این مقدار enum نشان دهنده هیچ مجموعه ای از برچسب معنایی نیست و می تواند در مواردی که برنامه به معنای راس نیاز ندارد استفاده شود.
یک دسته ردیاب مشبک صحنه ایجاد کنید
XrSceneMeshingTrackerANDROID
XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)
دسته XrSceneMeshingTrackerANDROID یک ردیاب مش بندی صحنه برای مش بندی صحنه و مدیریت منابع مرتبط را نشان می دهد.
از این دسته می توان برای ایجاد یک عکس فوری مش صحنه با استفاده از xrCreateSceneMeshSnapshotANDROID در این افزونه استفاده کرد.
xrCreateSceneMeshingTrackerANDROID
یک برنامه می تواند با استفاده از تابع xrCreateSceneMeshingTrackerANDROID یک دسته XrSceneMeshingTrackerANDROID ایجاد کند.
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
توضیحات پارامترها
-
sessionیک XrSession است که در آن ردیاب مش بندی صحنه فعال خواهد بود. -
createInfoیک اشاره گر به ساختار XrSceneMeshingTrackerCreateInfoANDROID است که برای توصیف ردیاب مشبک صحنه ای که قرار است ایجاد شود استفاده می شود. -
trackerدسته بازگشتی XrSceneMeshingTrackerANDROID است.
اگر سیستم از مش بندی صحنه پشتیبانی نمی کند، xrCreateSceneMeshingTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED را برمی گرداند. برنامه می تواند با فراخوانی xrGetSystemProperties با ساختار XrSystemSceneMeshingPropertiesANDROID ، پشتیبانی سیستم را بررسی کند.
فقط مجموعههای برچسب معنایی که توسط سیستم پشتیبانی میشوند میتوانند در XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet هنگام ایجاد یک ردیاب مشبک صحنه استفاده شوند. تابع xrEnumerateSupportedSemanticLabelSetsANDROID می تواند برای دریافت لیست مجموعه های برچسب معنایی پشتیبانی شده استفاده شود.
اگر برنامه یک semanticLabelSet پشتیبانی نشده درخواست کند، xrCreateSceneMeshingTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED برمی گرداند.
دسته xrCreateSceneMeshingTrackerANDROID دارای تمام منابع برای مش بندی صحنه است. پس از اتمام تجربه مش بندی صحنه، برنامه باید دسته را از طریق تابع xrDestroySceneMeshingTrackerANDROID از بین ببرد.
XrSceneMeshingTrackerCreateInfoANDROID
ساختار XrSceneMeshingTrackerCreateInfoANDROID اطلاعاتی را برای ایجاد یک دسته XrSceneMeshingTrackerANDROID توصیف می کند.
typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet;
XrBool32 enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
semanticLabelSetیک XrSceneMeshSemanticLabelSetANDROID است که برای تعیین مجموعه برچسب معنایی مورد استفاده برای مش بندی صحنه استفاده می شود. اگر این رویXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROIDتنظیم شود، زمان اجرا فیلد بافر XrSceneSubmeshDataANDROID::vertexSemantics را نادیده می گیرد. -
enableNormalsیک XrBool32 است که برای تعیین اینکه آیا هنگام دریافت داده مش صحنه، نرمال های راس را برای رئوس مش در بافر مش صحنه گنجانده شود یا نه استفاده می شود.
xrDestroySceneMeshingTrackerANDROID
تابع xrDestroySceneMeshingTrackerANDROID tracker و منابع زیربنایی را پس از اتمام تجربه مشبک سازی صحنه آزاد می کند.
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
توضیحات پارامترها
-
trackerیک XrSceneMeshingTrackerANDROID است که قبلا توسط xrCreateSceneMeshingTrackerANDROID ایجاد شده است.
یک دسته عکس فوری مش صحنه ایجاد کنید
XrSceneMeshSnapshotANDROID
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
دسته XrSceneMeshSnapshotANDROID یک عکس فوری مش صحنه را نشان می دهد. این با استفاده از xrCreateSceneMeshSnapshotANDROID ایجاد می شود که اساساً یک عکس فوری از داده مش صحنه را در زمان فراخوانی تابع می گیرد.
این دسته می تواند برای بازیابی اطلاعات و داده های زیرمش با استفاده از xrGetAllSubmeshStatesANDROID و xrGetSubmeshDataANDROID استفاده شود.
XrSceneMeshSnapshotCreateInfoANDROID
ساختار XrSceneMeshSnapshotCreateInfoANDROID اطلاعاتی را برای ایجاد یک دسته XrSceneMeshSnapshotANDROID توصیف می کند.
typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrBoxf boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
baseSpaceیک XrSpace است که برای توصیف فضای مرجع که در آن اطلاعات ژست زیرمش های صحنه باید نمایش داده شود استفاده می شود. -
timeXrTime است که زمانی را توصیف می کند که مش صحنه پردازش یا نمایش داده می شود. -
boundingBoxیک XrBoxf است که جعبه مرزی را که در آن مش صحنه را به دست میآورد، توصیف میکند.
XrSceneMeshTrackingStateANDROID
شمارش XrSceneMeshTrackingStateANDROID وضعیت ردیابی ردیاب مشبک صحنه را توصیف می کند. هر مقدار در این enum حالتی از ردیاب مش بندی صحنه را نشان می دهد. این شماره در ساختار XrSceneMeshSnapshotCreationResultANDROID پیچیده شده است که از xrCreateSceneMeshSnapshotANDROID برگردانده شده است.
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;
XrSceneMeshSnapshotCreationResultANDROID
ساختار XrSceneMeshSnapshotCreationResultANDROID نتیجه ایجاد یک عکس فوری مش صحنه بازگشتی از xrCreateSceneMeshSnapshotANDROID را ذخیره می کند. نتیجه شامل دسته عکس فوری و وضعیت ردیابی ردیاب مشبک صحنه در زمان ایجاد عکس فوری است.
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
void* next;
XrSceneMeshSnapshotANDROID snapshot;
XrSceneMeshTrackingStateANDROID trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
snapshotیک دسته XrSceneMeshSnapshotANDROID است که توسط زمان اجرا ایجاد شده است. -
trackingStateیک XrSceneMeshTrackingStateANDROID است که وضعیت ردیاب مش بندی صحنه را در زمان ایجاد عکس فوری توصیف می کند.
xrCreateSceneMeshSnapshotANDROID
این برنامه می تواند از تابع xrCreateSceneMeshSnapshotANDROID برای ایجاد یک عکس فوری مش صحنه از ردیاب مشبک صحنه استفاده کند. این تابع یک دسته XrSceneMeshSnapshotANDROID را به همراه XrSceneMeshTrackingStateANDROID که در ساختار XrSceneMeshSnapshotCreationResultANDROID پیچیده شده است، برمی گرداند. دسته از نظر فنی یک عکس فوری از داده های مش صحنه در زمان ایجاد است. این دسته می تواند برای پرس و جو از اطلاعات مش صحنه و داده ها به ترتیب با استفاده از xrGetAllSubmeshStatesANDROID و xrGetSubmeshDataANDROID استفاده شود.
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
توضیحات پارامترها
-
trackerیک دسته XrSceneMeshingTrackerANDROID است که قبلا با xrCreateSceneMeshingTrackerANDROID ایجاد شده است. -
createInfoاشاره گر به یک ساختار XrSceneMeshSnapshotCreateInfoANDROID است که حاوی اطلاعات لازم برای ایجاد عکس فوری مش صحنه است. -
outSnapshotCreationResultیک اشاره گر به یک شی XrSceneMeshSnapshotCreationResultANDROID است که توسط زمان اجرا با نتیجه ایجاد عکس فوری پر شده است.
دریافت داده مش صحنه از عکس فوری مش صحنه
XrSceneSubmeshStateANDROID
XrSceneSubmeshStateANDROID یک زیرمش را توصیف می کند. این شامل اطلاعات اولیه در مورد زیرمش (id، pose، bounds، آخرین زمان به روز رسانی) است.
typedef struct XrSceneSubmeshStateANDROID {
XrStructureType type;
void* next;
XrUuid submeshId;
XrTime lastUpdatedTime;
XrPosef submeshPoseInBaseSpace;
XrExtent3Df bounds;
} XrSceneSubmeshStateANDROID;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
submeshIdیک XrUuid است که زیرمش را شناسایی می کند. -
lastUpdatedTimeیک XrTime است که نشان دهنده زمان آخرین به روز رسانی زیر مش است. -
submeshPoseInBaseSpaceیک XrPosef است که نشان دهنده ژست زیر مش در فضای پایه است که برای ایجاد عکس فوری مش صحنه استفاده می شود. این همچنین موقعیت مرکز جعبه محدود کننده زیر مش است. -
boundsیک XrExtent3Df است که ابعاد جعبه مرزی را که زیر مش را در بر می گیرد، توصیف می کند. این کران در فضای پایه ای است که برای ایجاد دسته مش صحنه استفاده شده است.
xrGetAllSubmeshStatesANDROID
این برنامه می تواند از تابع xrGetAllSubmeshStatesANDROID برای دریافت وضعیت همه زیرمش ها در مش صحنه استفاده کند. این شامل اطلاعات اطلاعات اولیه است تا به برنامه اجازه دهد شبکه های فرعی را که برنامه برای آنها داده می خواهد انتخاب کند. این تابع را می توان در یک اصطلاح 2-تماسی استفاده کرد.
XrResult xrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates);
توضیحات پارامترها
-
snapshotیک دسته XrSceneMeshSnapshotANDROID است که قبلا با xrCreateSceneMeshSnapshotANDROID ایجاد شده است. -
submeshStateCapacityInputطولsubmeshStatesاست. -
submeshStateCountOutputتعداد عناصر موجود درsubmeshStatesاست که توسط زمان اجرا که از ابتدای آرایه شروع می شود، اصلاح می شوند. -
submeshStatesآرایهای از ساختارهای XrSceneSubmeshStateANDROID است که زمان اجرا وضعیت همه زیرمشها را در مش صحنه خروجی میدهد.
XrSceneSubmeshDataANDROID
XrSceneSubmeshDataANDROID حاوی داده های مثلثی برای یک زیرمش به همراه شناسه زیرمش است. این ساختار در xrGetSubmeshDataANDROID برای دریافت داده های زیرمش استفاده می شود. برنامه باید شناسه submesh این ساختار و نشانگرهای بافر را روی بافرهای اختصاص داده شده تنظیم کند تا داده های برگشتی برای submesh در بافرهای اختصاص داده شده پر شوند. برنامه می تواند از xrGetSubmeshDataANDROID به عنوان یک اصطلاح 2 تماسی استفاده کند که در آن تماس اول از برنامه نیاز دارد تا شناسه submesh را تنظیم کند و اندازه بافرهای مورد نیاز برای داده های submesh را دریافت کند و سپس برنامه می تواند بافرها را اختصاص دهد و داده ها را در تماس دوم دریافت کند.
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;
توضیحات اعضا
-
typeXrStructureType این ساختار است. -
nextNULLیا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
submeshIdیک XrUuid است که زیرمش را شناسایی می کند. -
vertexCapacityInputطولvertexPositions،vertexNormalsوvertexSemanticsاست. -
vertexCountOutputتعداد عناصرvertexPositions،vertexNormalsوvertexSemanticsاست که توسط زمان اجرا که از ابتدای آرایه شروع میشود، اصلاح شدهاند. -
vertexPositionsآرایهای از XrVector3f است که زمان اجرا موقعیتهای رأس زیرمش را به آن خروجی میدهد. -
vertexNormalsآرایه ای از XrVector3f است که زمان اجرا نرمال های رأس زیرمش را به آن خروجی می دهد. اگر برنامه یک ردیاب با غیرفعال بودن نرمال ایجاد کند، میتوان این قسمت راNULLگذاشت. -
vertexSemanticsآرایهای ازuint8_tاست که زمان اجرا، معنای راس زیرمش را به آن خروجی میدهد. اگر برنامه یک ردیاب با مجموعه برچسب معناییXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROIDایجاد کند، میتوان این فیلد راNULLگذاشت. -
indexCapacityInputطولindicesاست. -
indexCountOutputتعداد عناصر موجود درindicesاست که توسط زمان اجرا از ابتدای آرایه تغییر کرده اند. -
indicesآرایه ای ازuint32_tاست که زمان اجرا، اندیس های زیرمش را به آن خروجی می دهد.
xrGetSubmeshDataANDROID
این برنامه میتواند از تابع xrGetSubmeshDataANDROID برای دریافت دادههای فهرست انتخابی از زیرمشها استفاده کند. این تابع را می توان در یک اصطلاح 2-تماسی استفاده کرد. در تماس اول، برنامه باید یک شناسه submesh معتبر (به عنوان مثال: قابل بازیابی از xrGetAllSubmeshStatesANDROID با همان عکس فوری مش صحنه) و ظرفیت صفر برای هر عنصر در لیست انتخابی زیرمش ها تنظیم کند تا اندازه بافرهای مورد نیاز برای داده های submesh را بدست آورد. در فراخوانی دوم، برنامه باید نشانگرهای بافر را به یک بافر اختصاص داده شده برای هر عنصر در لیست انتخابی زیرمش ها به همراه ظرفیت بافرها برای دریافت داده های زیرمش ها تنظیم کند.
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
توضیحات پارامترها
-
snapshotیک دسته XrSceneMeshSnapshotANDROID است که قبلا با xrCreateSceneMeshSnapshotANDROID ایجاد شده است. -
submeshDataCountطولinoutSubmeshDataاست. -
inoutSubmeshDataآرایهای از XrSceneSubmeshDataANDROID است که در آن هر عنصر با دادههای مش در زمان اجرا بر اساس The submesh id پر میشود.
XrSceneMeshSemanticLabelANDROID
شمارش XrSceneMeshSemanticLabelANDROID مجموعه پیشفرض برچسبهای معنایی است که میتوان از آن برای برچسبگذاری رئوس مش استفاده کرد تا توصیف کند که راس مش در کدام سطح محیط فیزیکی قرار دارد. این مجموعه enum با مقدار 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;
یک عکس فوری مش صحنه را از بین ببرید
xrDestroySceneMeshSnapshotANDROID
این برنامه می تواند از تابع xrDestroySceneMeshSnapshotANDROID برای از بین بردن یک عکس فوری مش صحنه استفاده کند. هنگامی که دسته از بین می رود، برنامه دیگر نمی تواند از آن برای دریافت اطلاعات یا داده های submesh استفاده کند. وقتی ردیاب از بین میرود، دسته بهطور خودکار از بین میرود، زیرا دسته ردیاب والد دسته عکس فوری مش صحنه است.
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
توضیحات پارامترها
-
snapshotیک دسته XrSceneMeshSnapshotANDROID است که قبلا با xrCreateSceneMeshSnapshotANDROID ایجاد شده بود که توسط این تابع از بین می رود.
کد مثال برای مش بندی صحنه
کد مثال زیر نحوه دسترسی به داده مش صحنه را برای رندر نشان می دهد.
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
std::vector<XrSceneSubmeshStateANDROID> states;
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
states.resize(submeshCount);
for (XrSceneSubmeshStateANDROID& state : states) {
state = {.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.vertexCountOutput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCountOutput];
}
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 =
reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
انواع اشیاء جدید
ثابت های جدید Enum
شمارش XrObjectType با:
-
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID -
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
شمارش XrStructureType با:
-
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID -
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_STATE_ANDROID -
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID
فهرست های جدید
ساختارهای جدید
- XrSystemSceneMeshingPropertiesANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneSubmeshStateANDROID
- XrSceneSubmeshDataANDROID
توابع جدید
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
مسائل
تاریخچه نسخه
- ویرایش 3، 15-05-2025 (سالار خان) ** توضیحات پسوند اولیه
OpenXR™ و لوگوی OpenXR علائم تجاری متعلق به The Khronos Group Inc. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.