XR_EXT_spatial_mesh_tracking
Name String
XR_EXT_spatial_mesh_tracking
ประเภทส่วนขยาย
ส่วนขยายอินสแตนซ์
หมายเลขต่อที่ลงทะเบียนไว้
784
การแก้ไข
1
สถานะการให้สัตยาบัน
ไม่ได้รับการให้สัตยาบัน
ทรัพยากร Dependency ของส่วนขยายและเวอร์ชัน
XR_EXT_spatial_entity
ผู้เขียน
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
ภาพรวม
ส่วนขยายนี้ต่อยอดจาก XR_EXT_spatial_entity และกำหนดความสามารถเชิงพื้นที่สำหรับการติดตามตาข่ายสามเหลี่ยมของสภาพแวดล้อม ตาข่ายสามเหลี่ยมที่ได้จากความสามารถที่กำหนดไว้ในส่วนขยายนี้มีไว้เพื่อใช้โดยแอปพลิเคชันเพื่อระบุการชนกันของเนื้อหาเสมือนกับสภาพแวดล้อม
ความสามารถในการติดตามเมชเชิงพื้นที่
ส่วนขยายนี้กำหนดให้ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT เป็นความสามารถเชิงพื้นที่สำหรับการติดตามตาข่ายสามเหลี่ยมของสภาพแวดล้อม ความสามารถนี้ไม่ครอบคลุมการติดตามเมชของเอนทิตี เช่น ระนาบและออบเจ็กต์ และต้องระบุด้วยการแจกแจงคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT สำหรับความสามารถที่เกี่ยวข้องในการติดตามเอนทิตีเหล่านั้นแทน
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ใช้เพื่อจัดหาทั้ง Mesh ที่กันน้ำและไม่กันน้ำให้กับแอปพลิเคชัน โดยขึ้นอยู่กับความสามารถของรันไทม์และการกำหนดค่าที่แอปพลิเคชันเลือก
เมชที่ไม่มีช่องว่างคือเมชที่มีการเติมช่องว่างและบริเวณที่ไม่ได้สแกนทุกขนาด และสร้างเมชที่แน่นหนาภายในบล็อกปริมาตรที่เฉพาะเจาะจง ตามชื่อที่บอกไว้ หากแอปพลิเคชันเติมน้ำเข้าไปในเมชที่กันน้ำได้ ก็ไม่ควรมีน้ำรั่วไหลออกจากปริมาตรที่กันน้ำได้ การทำให้เมชที่สแกนเป็นแบบกันน้ำมักต้องใช้การประมวลผลที่สูงมาก แม้ว่ารันไทม์บางรายการจะชดเชยต้นทุนดังกล่าวด้วยการประมวลผลเมชล่วงหน้าก็ตาม
การสนับสนุนรันไทม์
หากรันไทม์รองรับการติดตามสำหรับตาข่ายสามเหลี่ยมของสภาพแวดล้อม รันไทม์ต้องระบุสิ่งนี้โดยการแจกแจง XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ใน xrEnumerateSpatialCapabilitiesEXT
รันไทม์ที่รองรับ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT มีความสามารถที่เป็นไปได้ 3 อย่าง ดังนี้
- รันไทม์รองรับเฉพาะการติดตาม Mesh ที่ไม่กันน้ำ ในกรณีนี้ รันไทม์จะแจกแจง
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTใน xrEnumerateSpatialCapabilitiesEXT แต่ต้องไม่แจกแจงXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTใน xrEnumerateSpatialCapabilityFeaturesEXT (ดูการติดตามเมชแบบกันน้ำ) - รันไทม์รองรับทั้งการติดตามเมชแบบกันน้ำและไม่กันน้ำ ในกรณีนี้ รันไทม์จะแจกแจง
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTใน xrEnumerateSpatialCapabilitiesEXT และต้องแจกแจงXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTใน xrEnumerateSpatialCapabilityFeaturesEXT ด้วย (ดูการติดตามเมชแบบปิด) เพื่อเปิดใช้คำขอการติดตามเมชแบบปิดจากแอปพลิเคชัน - รันไทม์รองรับเฉพาะการติดตามเมชแบบกันน้ำเท่านั้น ในกรณีนี้ รันไทม์จะแจกแจง
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTใน xrEnumerateSpatialCapabilitiesEXT และต้องแจกแจงXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTใน xrEnumerateSpatialCapabilityFeaturesEXT ด้วย (ดูการติดตามเมชแบบปิด) เพื่อระบุให้แอปพลิเคชันทราบว่ารองรับการติดตามเมชแบบปิด ในกรณีนี้ รันไทม์จะแสดงผลเมชที่ไม่มีช่องว่างไปยังแอปพลิเคชันเสมอ ไม่ว่าการกำหนดค่าสำหรับXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTจะเป็นอย่างไรก็ตาม
การกำหนดค่า
โครงสร้าง XrSpatialCapabilityConfigurationMeshTrackingEXT มีคำจำกัดความดังนี้
typedef struct XrSpatialCapabilityConfigurationMeshTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMeshTrackingEXT;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้างcapabilityเป็น XrSpatialCapabilityEXT และต้องเป็นXR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTenabledComponentCountคือuint32_tที่อธิบายจำนวนองค์ประกอบในอาร์เรย์enabledComponentsenabledComponentsเป็นตัวชี้ไปยังอาร์เรย์ของ XrSpatialComponentTypeEXT
แอปพลิเคชันสามารถเปิดใช้ความสามารถเชิงมิติพื้นที่ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT โดยใส่พอยเตอร์ไปยังโครงสร้าง XrSpatialCapabilityConfigurationMeshTrackingEXT ใน XrSpatialContextCreateInfoEXT :: capabilityConfigs
รันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE หาก capability ไม่ใช่ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_EXT_spatial_mesh_trackingก่อนใช้ XrSpatialCapabilityConfigurationMeshTrackingEXT -
typeต้องเป็นXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXT -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง ดูเพิ่มเติม: XrSpatialFeatureTrackWatertightMeshEXT -
capabilityต้องเป็นค่า XrSpatialCapabilityEXT ที่ถูกต้อง -
enabledComponentsต้องเป็นตัวชี้ไปยังอาร์เรย์ของค่า XrSpatialComponentTypeEXT ที่ถูกต้องenabledComponentCountค่า - พารามิเตอร์
enabledComponentCountต้องมากกว่า0
การติดตามเมชแบบกันน้ำ
โครงสร้าง XrSpatialFeatureTrackWatertightMeshEXT มีคำจำกัดความดังนี้
typedef struct XrSpatialFeatureTrackWatertightMeshEXT {
XrStructureType type;
const void* next;
XrBool32 enableWatertightMeshTracking;
} XrSpatialFeatureTrackWatertightMeshEXT;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้างenableWatertightMeshTrackingระบุว่ารันไทม์ต้องคำนวณเมชที่ไม่มีช่องโหว่สำหรับสภาพแวดล้อมที่สแกนหรือไม่
รันไทม์ที่รองรับการติดตามเมชแบบกันน้ำต้องแจกแจง XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ใน xrEnumerateSpatialCapabilityFeaturesEXT ฟีเจอร์ XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT ช่วยให้แอปพลิเคชันเลือกเปิดใช้การติดตามเมชแบบกันน้ำและเลือกใช้การประมวลผลเพิ่มเติมที่การสร้างเมชแบบกันน้ำอาจทำให้เกิดขึ้นได้อย่างชัดเจน
หาก XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT มีการแจกแจงโดย xrEnumerateSpatialCapabilityFeaturesEXT สำหรับความสามารถบางอย่าง แอปพลิเคชันสามารถเชื่อมโยง XrSpatialFeatureTrackWatertightMeshEXT กับโครงสร้างการกำหนดค่าที่เกี่ยวข้องของความสามารถนั้นเพื่อระบุว่าต้องการให้เมชที่ติดตามเป็นแบบกันน้ำหรือไม่ หากแอปพลิเคชันตั้งค่า enableWatertightMeshTracking เป็น XR_TRUE รันไทม์ต้องคำนวณและจัดเตรียมเมชที่กันน้ำของสภาพแวดล้อมให้กับแอปพลิเคชัน หากแอปพลิเคชันตั้งค่า enableWatertightMeshTracking เป็น XR_FALSE เมชที่ติดตามอาจยังคงเป็นแบบกันน้ำได้หากรันไทม์รองรับเฉพาะการติดตามเมชแบบกันน้ำได้ เช่น ในกรณีที่รันไทม์ให้เมชที่ประมวลผลแล้วจากสภาพแวดล้อมที่สแกนไว้ล่วงหน้า
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_EXT_spatial_mesh_trackingก่อนใช้ XrSpatialFeatureTrackWatertightMeshEXT -
typeต้องเป็นXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง
ขั้นตอนการสมัคร
แผนภาพด้านล่างแสดงวิธีที่แอปพลิเคชันสามารถกำหนดค่าบริบทเชิงพื้นที่ได้หากต้องการติดตามเมชแบบกันน้ำของสภาพแวดล้อม
ใช่
ใช่
แอปต้องใช้
เมชแบบกันน้ำ
แอปต้องการ...
ใช่
ได้
ไม่ใช่
ไม่
รันไทม์
รองรับความสามารถ
"การติดตามเมช"
รันไทม์...
ใช่
ได้
ไม่ใช่
ไม่
รันไทม์
รองรับฟีเจอร์
"ติดตามเมชแบบกันน้ำ"
รันไทม์...
แอปสร้างบริบทเชิงพื้นที่ด้วย "ความสามารถในการติดตามเมช" และฟีเจอร์ "ติดตามเมชแบบกันน้ำ"
แอปสร้างเสียงรอบทิศทาง...
แอปจัดการกับการขาดการรองรับฟีเจอร์ในรันไทม์ปัจจุบัน
แอปจัดการการขาด...
แอปจะประมวลผลเมชที่ติดตามเพื่อสร้างเมชที่สมบูรณ์ด้วยตัวเอง โดยอาจได้รับความช่วยเหลือจากผู้ใช้ในการปะรูในเมช
แอปประมวลผลการทำธุรกรรม... ข้อความไม่ใช่ SVG - แสดงไม่ได้
รูปที่ 29 ขั้นตอนของแอปในการขอเมชแบบกันน้ำ
องค์ประกอบที่รับประกัน
รันไทม์ที่รองรับ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ต้องระบุคอมโพเนนต์เชิงพื้นที่ต่อไปนี้เป็นคอมโพเนนต์ที่รับประกันของเอนทิตีทั้งหมดที่ค้นพบโดยความสามารถนี้ และต้องแจกแจงคอมโพเนนต์เหล่านั้นใน xrEnumerateSpatialCapabilityComponentTypesEXT ดังนี้
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
องค์ประกอบ 3 มิติที่มีขอบเขต
คอมโพเนนต์ 3 มิติที่มีขอบเขตจะระบุจุดศูนย์กลางและขอบเขตของเอนทิตีที่อยู่บนคอมโพเนนต์ ข้อมูลที่คอมโพเนนต์นี้ให้มาช่วยให้แอปพลิเคชันคัดแยกเอนทิตีที่อยู่นอกมุมมอง Frustum ได้ง่ายขึ้น
ดูรายละเอียดเพิ่มเติมได้ที่โมเดล 3 มิติแบบมีขอบเขต
คอมโพเนนต์ Mesh 3D
คอมโพเนนต์ 3 มิติแบบเมชจะแสดงเมช 3 มิติของเอนทิตีที่อยู่บนนั้น ดูรายละเอียดเพิ่มเติมได้ที่ Mesh 3D
การแบ่งกลุ่มตามปริมาณ (การแบ่งเป็นกลุ่มย่อย)
รันไทม์อาจแบ่งกลุ่ม Mesh ออกเป็นบล็อกเชิงปริมาตร (กลุ่ม) เพื่อให้แอปพลิเคชันคัดแยกบล็อก Mesh ที่อยู่นอกฟรัสตัมมุมมองได้ง่ายขึ้น ในกรณีนี้ รันไทม์ต้องถือว่าบล็อกเชิงปริมาตรแต่ละบล็อกเป็นเอนทิตีแยกกัน และมีชุดคอมโพเนนต์ที่รับประกันในเอนทิตี (บล็อกเชิงปริมาตร) แต่ละรายการ หากรันไทม์ให้เมชที่ไม่มีช่องว่างในลักษณะนี้ บล็อกเชิงปริมาตรแต่ละบล็อกจะไม่มีช่องว่าง แต่กลุ่มบล็อกจะรวมกันเป็นเมชที่ไม่มีช่องว่าง ในสถานการณ์เช่นนี้ รันไทม์ต้องเพิ่มคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT ในแต่ละเอนทิตี (บล็อกเชิงปริมาตร) และค่าของเอนทิตีหลักในบล็อกที่รวมกันเป็นเมชแบบกันน้ำต้องเหมือนกัน ซึ่งจะช่วยให้แอปพลิเคชันระบุได้ว่าส่วนใดที่รวมกันแล้วจะสร้างเป็น Mesh ที่ไม่มีช่องโหว่
เมชของบล็อกเชิงปริมาตรที่อยู่ติดกันอาจใช้จุดยอดร่วมกันได้ แต่สามเหลี่ยมของบล็อกเชิงปริมาตรหนึ่งต้องไม่ซ้อนทับกับสามเหลี่ยมของปริมาตรที่อยู่ติดกัน
คอมโพเนนต์ที่ไม่บังคับ
เวกเตอร์แนวฉากของเมช
ข้อมูลคอมโพเนนต์
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT ใช้ XrSpatialBufferEXT สำหรับข้อมูล XrSpatialBufferEXT :: bufferId แสดงบัฟเฟอร์ที่มีเวกเตอร์ปกติของเวอร์เท็กซ์ของเมชของเอนทิตีที่คอมโพเนนต์นี้อยู่ XrSpatialBufferEXT :: bufferType ต้องเป็น XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT เอนทิตีที่มี XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT ต้องมี XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT ด้วย เวกเตอร์แนวฉากที่คอมโพเนนต์นี้ระบุต้องสอดคล้องกับจุดยอดที่ระบุใน XrSpatialMeshDataEXT :: vertexBuffer ของคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
โครงสร้างรายการคอมโพเนนต์เพื่อค้นหาข้อมูล
โครงสร้าง XrSpatialComponentMesh3DNormalsListEXT มีคำจำกัดความดังนี้
typedef struct XrSpatialComponentMesh3DNormalsListEXT {
XrStructureType type;
void* next;
uint32_t meshNormalsCount;
XrSpatialBufferEXT* meshNormals;
} XrSpatialComponentMesh3DNormalsListEXT;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้meshNormalsCountคือuint32_tที่อธิบายจำนวนองค์ประกอบในอาร์เรย์meshNormalsmeshNormalsคืออาร์เรย์ของ XrVector3f
รันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE จาก xrQuerySpatialComponentDataEXT หาก XrSpatialComponentMesh3DNormalsListEXT อยู่ในเชนถัดไปของ XrSpatialComponentDataQueryResultEXT :: next แต่ XrSpatialComponentDataQueryConditionEXT :: componentTypeCount ไม่ใช่ 0 และ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT ไม่รวมอยู่ใน XrSpatialComponentDataQueryConditionEXT :: componentTypes
รันไทม์ต้องแสดงผล XR_ERROR_SIZE_INSUFFICIENT จาก xrQuerySpatialComponentDataEXT หาก meshNormalsCount น้อยกว่า XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_EXT_spatial_mesh_trackingก่อนที่จะใช้ XrSpatialComponentMesh3DNormalsListEXT -
typeต้องเป็นXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXT -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง -
meshNormalsต้องเป็นตัวชี้ไปยังอาร์เรย์ของโครงสร้างmeshNormalsCountXrSpatialBufferEXT - พารามิเตอร์
meshNormalsCountต้องมากกว่า0
การกำหนดค่า
หาก XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT มีการแจกแจงใน XrSpatialCapabilityComponentTypesEXT :: componentTypes สำหรับความสามารถบางอย่าง แอปพลิเคชันสามารถเปิดใช้ได้โดยรวม enum ไว้ในรายการ XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents คอมโพเนนต์นี้ไม่จำเป็นต้องมีการกำหนดค่าพิเศษใดๆ เพื่อรวมไว้ในเชนถัดไปของ XrSpatialCapabilityConfigurationBaseHeaderEXT อย่างไรก็ตาม เราขอแนะนำให้แอปพลิเคชันใช้คอมโพเนนต์นี้และข้อมูลของคอมโพเนนต์ร่วมกับคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
ป้ายกำกับความหมายของ Mesh
typedef enum XrSpatialMeshSemanticLabelEXT {
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT = 2,
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT = 3,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT = 4,
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT = 6,
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT = 7,
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT = 8,
XR_SPATIAL_MESH_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMeshSemanticLabelEXT;
การแจงนับ XrSpatialMeshSemanticLabelEXT อธิบายชุดป้ายกำกับความหมายสำหรับ Mesh คอมโพเนนต์เชิงพื้นที่ต่างๆ จะใช้ค่านี้เพื่อกำหนดความหมายให้กับค่า uint8_t จาก XrSpatialBufferEXT สำหรับป้ายกำกับเชิงความหมายต่อจุดยอดหรือต่อสามเหลี่ยม ดูป้ายกำกับความหมายของจุดยอดของ Mesh และป้ายกำกับความหมายของสามเหลี่ยมของ Mesh
ส่วนขยายที่ต้องการขยายชุดป้ายกำกับเชิงความหมายนี้หรือเพิ่มชุดใหม่ของตนเองสำหรับ Mesh ควรทำตามหลักเกณฑ์ที่ระบุไว้ในหลักเกณฑ์การออกแบบและการขยายป้ายกำกับเชิงความหมาย
คำอธิบาย Enum
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT
รันไทม์ไม่สามารถจำแนกประเภทจุดยอดหรือสามเหลี่ยมได้
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับพื้น
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับผนัง
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับเพดาน
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับตาราง
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับเก้าอี้
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับโซฟา
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT
จุดยอดหรือสามเหลี่ยมจะแมปกับเตียง
ป้ายกำกับความหมายของจุดยอด Mesh
ภาพรวมของคอมโพเนนต์
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT มีป้ายกำกับเชิงความหมายรายการเดียวสำหรับแต่ละจุดยอดของ Mesh ของเอนทิตีเชิงพื้นที่
ข้อมูลคอมโพเนนต์
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT ใช้ XrSpatialBufferEXT สำหรับข้อมูล XrSpatialBufferEXT :: bufferId แสดงบัฟเฟอร์ที่มีป้ายกำกับความหมายของจุดยอดของเมชของเอนทิตีที่คอมโพเนนต์นี้อยู่ XrSpatialBufferEXT :: bufferType ต้องเป็น XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ค่าในบัฟเฟอร์จะสอดคล้องกับค่าของการแจงนับ XrSpatialMeshSemanticLabelEXT เอนทิตีที่มี XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT ต้องมีคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT อยู่ด้วย ป้ายกำกับเชิงความหมายที่คอมโพเนนต์นี้ระบุต้องสอดคล้องกับจุดยอดที่ระบุใน XrSpatialMeshDataEXT :: vertexBuffer ของคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT ซึ่งหมายความว่าป้ายกำกับเชิงความหมายที่ดัชนีหนึ่งๆ ของข้อมูลบัฟเฟอร์เชิงพื้นที่ที่คอมโพเนนต์นี้ให้มาจะสอดคล้องกับจุดยอดที่ดัชนีเดียวกันที่ XrSpatialMeshDataEXT :: vertexBuffer ให้มา ซึ่งหมายความว่า xrGetSpatialBufferUint8EXT :: bufferCountOutput ต้องเป็นค่าเดียวกันสำหรับบัฟเฟอร์ป้ายกำกับความหมายของจุดยอดและ XrSpatialMeshDataEXT :: vertexBuffer
โครงสร้างรายการคอมโพเนนต์เพื่อค้นหาข้อมูล
โครงสร้าง XrSpatialComponentMesh3DVertexSemanticLabelsListEXT มีคำจำกัดความดังนี้
typedef struct XrSpatialComponentMesh3DVertexSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DVertexSemanticLabelsListEXT;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้meshSemanticLabelsCountคือuint32_tที่อธิบายจำนวนองค์ประกอบในอาร์เรย์meshSemanticLabelsmeshSemanticLabelsคืออาร์เรย์ของ XrSpatialBufferEXT
รันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE จาก xrQuerySpatialComponentDataEXT หาก XrSpatialComponentMesh3DVertexSemanticLabelsListEXT อยู่ในเชนถัดไปของ XrSpatialComponentDataQueryResultEXT :: next แต่ XrSpatialComponentDataQueryConditionEXT :: componentTypeCount ไม่ใช่ 0 และ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT ไม่รวมอยู่ใน XrSpatialComponentDataQueryConditionEXT :: componentTypes
รันไทม์ต้องแสดงผล XR_ERROR_SIZE_INSUFFICIENT จาก xrQuerySpatialComponentDataEXT หาก meshSemanticLabelsCount น้อยกว่า XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_EXT_spatial_mesh_trackingก่อนใช้ XrSpatialComponentMesh3DVertexSemanticLabelsListEXT -
typeต้องเป็นXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXT -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง -
meshSemanticLabelsต้องเป็นตัวชี้ไปยังอาร์เรย์ของโครงสร้างmeshSemanticLabelsCountXrSpatialBufferEXT - พารามิเตอร์
meshSemanticLabelsCountต้องมากกว่า0
การกำหนดค่า
หาก XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT มีการแจกแจงใน XrSpatialCapabilityComponentTypesEXT :: componentTypes สำหรับความสามารถบางอย่าง แอปพลิเคชันสามารถเปิดใช้ได้โดยรวม enum ไว้ในรายการ XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents คอมโพเนนต์นี้ไม่จำเป็นต้องมีการกำหนดค่าพิเศษใดๆ เพื่อรวมไว้ในเชนถัดไปของ XrSpatialCapabilityConfigurationBaseHeaderEXT อย่างไรก็ตาม เราขอแนะนำให้แอปพลิเคชันใช้คอมโพเนนต์นี้และข้อมูลของคอมโพเนนต์ร่วมกับคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT ไม่สามารถเปิดใช้คอมโพเนนต์นี้ร่วมกับ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ได้ หากแอปพลิเคชันเพิ่มทั้ง XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT และ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ลงใน XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents รันไทม์ต้องแสดงผล XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT รันไทม์ต้องแสดงผล XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT ด้วยหากแอปพลิเคชันพยายามเปิดใช้ทั้ง 2 คอมโพเนนต์ใน XrSpatialContextEXT แยกกัน
ป้ายกำกับความหมายของสามเหลี่ยม Mesh
ภาพรวมของคอมโพเนนต์
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT มีป้ายกำกับเชิงความหมายรายการเดียวสำหรับสามเหลี่ยมแต่ละรูปของเมชของเอนทิตีเชิงพื้นที่
ข้อมูลคอมโพเนนต์
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ใช้ XrSpatialBufferEXT สำหรับข้อมูล XrSpatialBufferEXT :: bufferId แสดงบัฟเฟอร์ที่มีป้ายกำกับความหมายสามเหลี่ยมของเมชของเอนทิตีที่คอมโพเนนต์นี้อยู่ XrSpatialBufferEXT :: bufferType ต้องเป็น XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ค่าในบัฟเฟอร์จะสอดคล้องกับค่าของการแจงนับ XrSpatialMeshSemanticLabelEXT เอนทิตีที่มี XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ต้องมีคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT อยู่ด้วย ป้ายกำกับเชิงความหมายที่คอมโพเนนต์นี้ให้มาต้องสอดคล้องกับสามเหลี่ยมที่ระบุไว้ใน XrSpatialMeshDataEXT ของคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT จำนวนองค์ประกอบของบัฟเฟอร์เชิงพื้นที่ที่มีป้ายกำกับความหมายของสามเหลี่ยมคือจำนวนองค์ประกอบของ XrSpatialMeshDataEXT :: indexBuffer หารด้วย 3 ซึ่งหมายความว่าป้ายกำกับเชิงความหมายที่ดัชนีหนึ่งๆ ของข้อมูลบัฟเฟอร์เชิงพื้นที่ที่คอมโพเนนต์นี้ให้มาจะสอดคล้องกับสามเหลี่ยมที่แสดงโดย [index * 3], [index * 3 + 1], [index * 3 + 2] ใน XrSpatialMeshDataEXT :: indexBuffer
โครงสร้างรายการคอมโพเนนต์เพื่อค้นหาข้อมูล
โครงสร้าง XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT มีคำจำกัดความดังนี้
typedef struct XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง ไม่มีการกำหนดโครงสร้างดังกล่าวใน OpenXR หลักหรือส่วนขยายนี้meshSemanticLabelsCountคือuint32_tที่อธิบายจำนวนองค์ประกอบในอาร์เรย์meshSemanticLabelsmeshSemanticLabelsคืออาร์เรย์ของ XrSpatialBufferEXT
รันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE จาก xrQuerySpatialComponentDataEXT หาก XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT อยู่ในเชนถัดไปของ XrSpatialComponentDataQueryResultEXT :: next แต่ XrSpatialComponentDataQueryConditionEXT :: componentTypeCount ไม่ใช่ 0 และ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ไม่รวมอยู่ใน XrSpatialComponentDataQueryConditionEXT :: componentTypes
รันไทม์ต้องแสดงผล XR_ERROR_SIZE_INSUFFICIENT จาก xrQuerySpatialComponentDataEXT หาก meshSemanticLabelsCount น้อยกว่า XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_EXT_spatial_mesh_trackingก่อนใช้ XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT -
typeต้องเป็นXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXT -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในเชนโครงสร้าง -
meshSemanticLabelsต้องเป็นตัวชี้ไปยังอาร์เรย์ของโครงสร้างmeshSemanticLabelsCountXrSpatialBufferEXT - พารามิเตอร์
meshSemanticLabelsCountต้องมากกว่า0
การกำหนดค่า
หาก XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT มีการแจกแจงใน XrSpatialCapabilityComponentTypesEXT :: componentTypes สำหรับความสามารถบางอย่าง แอปพลิเคชันสามารถเปิดใช้ได้โดยรวม enum ไว้ในรายการ XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents คอมโพเนนต์นี้ไม่จำเป็นต้องมีการกำหนดค่าพิเศษใดๆ เพื่อรวมไว้ในเชนถัดไปของ XrSpatialCapabilityConfigurationBaseHeaderEXT อย่างไรก็ตาม เราขอแนะนำให้แอปพลิเคชันใช้คอมโพเนนต์นี้และข้อมูลของคอมโพเนนต์ร่วมกับคอมโพเนนต์ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT ไม่สามารถเปิดใช้คอมโพเนนต์นี้ร่วมกับ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT ได้ หากแอปพลิเคชันเพิ่มทั้ง XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT และ XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT ลงใน XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents รันไทม์ต้องแสดงผล XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT รันไทม์ต้องแสดงผล XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT ด้วยหากแอปพลิเคชันพยายามเปิดใช้ทั้ง 2 คอมโพเนนต์ใน XrSpatialContextEXT แยกกัน
โครงสร้างใหม่
Enum ใหม่
ค่าคงที่ Enum ใหม่
XR_EXT_SPATIAL_MESH_TRACKING_EXTENSION_NAMEXR_EXT_spatial_mesh_tracking_SPEC_VERSIONการขยาย XrSpatialCapabilityEXT :
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
การขยาย XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
การขยาย XrSpatialComponentTypeEXT :
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
การขยาย XrStructureType :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT
ปัญหา
ประวัติเวอร์ชัน
ฉบับแก้ไข 1, 2025-11-02 (Nihav Jain, Google)
- คำอธิบายส่วนขยายเริ่มต้น