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_EXT
  • enabledComponentCount คือ uint32_t ที่อธิบายจำนวนองค์ประกอบในอาร์เรย์ enabledComponents
  • enabledComponents เป็นตัวชี้ไปยังอาร์เรย์ของ XrSpatialComponentTypeEXT

แอปพลิเคชันสามารถเปิดใช้ความสามารถเชิงมิติพื้นที่ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT โดยใส่พอยเตอร์ไปยังโครงสร้าง XrSpatialCapabilityConfigurationMeshTrackingEXT ใน XrSpatialContextCreateInfoEXT :: capabilityConfigs

รันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE หาก capability ไม่ใช่ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

การใช้งานที่ถูกต้อง (โดยนัย)

การติดตามเมชแบบกันน้ำ

โครงสร้าง 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 เมชที่ติดตามอาจยังคงเป็นแบบกันน้ำได้หากรันไทม์รองรับเฉพาะการติดตามเมชแบบกันน้ำได้ เช่น ในกรณีที่รันไทม์ให้เมชที่ประมวลผลแล้วจากสภาพแวดล้อมที่สแกนไว้ล่วงหน้า

การใช้งานที่ถูกต้อง (โดยนัย)

ขั้นตอนการสมัคร

แผนภาพด้านล่างแสดงวิธีที่แอปพลิเคชันสามารถกำหนดค่าบริบทเชิงพื้นที่ได้หากต้องการติดตามเมชแบบกันน้ำของสภาพแวดล้อม

ใช่

ใช่

แอปต้องใช้
เมชแบบกันน้ำ

แอปต้องการ...

ใช่

ได้

ไม่ใช่

ไม่

รันไทม์
รองรับความสามารถ
"การติดตามเมช"

รันไทม์...

ใช่

ได้

ไม่ใช่

ไม่

รันไทม์
รองรับฟีเจอร์
"ติดตามเมชแบบกันน้ำ"

รันไทม์...

แอปสร้างบริบทเชิงพื้นที่ด้วย "ความสามารถในการติดตามเมช" และฟีเจอร์ "ติดตามเมชแบบกันน้ำ"

แอปสร้างเสียงรอบทิศทาง...

แอปจัดการกับการขาดการรองรับฟีเจอร์ในรันไทม์ปัจจุบัน

แอปจัดการการขาด...

แอปจะประมวลผลเมชที่ติดตามเพื่อสร้างเมชที่สมบูรณ์ด้วยตัวเอง โดยอาจได้รับความช่วยเหลือจากผู้ใช้ในการปะรูในเมช

แอปประมวลผลการทำธุรกรรม... ข้อความไม่ใช่ SVG - แสดงไม่ได้

รูปที่ 29 ขั้นตอนของแอปในการขอเมชแบบกันน้ำ

องค์ประกอบที่รับประกัน

รันไทม์ที่รองรับ XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ต้องระบุคอมโพเนนต์เชิงพื้นที่ต่อไปนี้เป็นคอมโพเนนต์ที่รับประกันของเอนทิตีทั้งหมดที่ค้นพบโดยความสามารถนี้ และต้องแจกแจงคอมโพเนนต์เหล่านั้นใน xrEnumerateSpatialCapabilityComponentTypesEXT ดังนี้

  • XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
  • XR_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 ที่อธิบายจำนวนองค์ประกอบในอาร์เรย์ meshNormals
  • meshNormals คืออาร์เรย์ของ 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 ต้องเป็นตัวชี้ไปยังอาร์เรย์ของโครงสร้าง meshNormalsCount XrSpatialBufferEXT
  • พารามิเตอร์ 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 ที่อธิบายจำนวนองค์ประกอบในอาร์เรย์ meshSemanticLabels
  • meshSemanticLabels คืออาร์เรย์ของ 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_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 ที่อธิบายจำนวนองค์ประกอบในอาร์เรย์ meshSemanticLabels
  • meshSemanticLabels คืออาร์เรย์ของ 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_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_NAME
  • XR_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_EXT
    • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
    • XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
  • การขยาย XrStructureType :

    • XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXT
    • XR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT

ปัญหา

ประวัติเวอร์ชัน

  • ฉบับแก้ไข 1, 2025-11-02 (Nihav Jain, Google)

    • คำอธิบายส่วนขยายเริ่มต้น