رشته نام 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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته OpenXR یا این پسوند تعریف نشده است. -
baseSpace
یک XrSpace است که برای توصیف فضای مرجع که در آن اطلاعات ژست زیرمش های صحنه باید نمایش داده شود استفاده می شود. -
time
XrTime است که زمانی را توصیف می کند که مش صحنه پردازش یا نمایش داده می شود. -
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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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;
توضیحات اعضا
-
type
XrStructureType این ساختار است. -
next
NULL
یا اشاره گر به ساختار بعدی در زنجیره ساختار است. چنین ساختاری در هسته 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. هستند و به عنوان یک علامت تجاری در چین، اتحادیه اروپا، ژاپن و بریتانیا ثبت شده اند.