Ad dizesi
XR_ANDROID_hand_mesh
Uzantı Türü
Örnek uzatma
Kayıtlı Uzatma Numarası
704
Düzeltme
1
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2024-09-10
IP Durumu
Bilinen IP hak talepleri yok.
Katkıda bulunanlar
Nihav Jain, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Genel Bakış
Bu uzantı, dinamik bir el örgüsü olarak gösterilen el takibini etkinleştirir.
Bu uzantı, kullanıcının ellerinin kişiselleştirilmiş bir temsilinin örgüsü için köşe ve dizin tamponları sağlamak üzere tasarlanmıştır. Gizleme ve görselleştirme için kullanılabilir.
Bu uzantı, diğer el izleme amaçları için kullanılmamalıdır.
- Etkileşim için
XR_EXT_hand_interaction
kullanıla bilir. - İskelet eklemleri için
XR_EXT_hand_tracking
kullanıla bilir.
El izleme verileri hassas kişisel bilgiler olabilir ve kişisel gizlilik ve bütünlükle yakından ilişkilidir. El izleme verilerini depolayan veya aktaran uygulamaların, bunu yapmak için her zaman kullanıcıdan etkin ve belirli bir onay istemesi önemle tavsiye edilir.
Sistem kapasitesini inceleme
Bir uygulama, xrGetSystemProperties çağrısı sırasında XrSystemHandMeshTrackingPropertiesANDROID yapısını XrSystemProperties ile zincirleyerek sistemin el ağlarını izleyip izleyemediğini kontrol edebilir.
typedef struct XrSystemHandMeshTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsHandMeshTracking;
XrBool32 supportsTextureUV;
XrBool32 supportsVertexNormal;
} XrSystemHandMeshTrackingPropertiesANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.supportsHandMeshTracking
, seçiliXrSystemId
cihazın el örgüsü izlemeyi destekleyip desteklemediğini belirten birXrBool32
öğesidir.supportsTextureUV
, seçiliXrSystemId
'in örgü köşeleri için doku UV'lerini destekleyip desteklemediğini belirten birXrBool32
bağımsız değişkenidir.supportsVertexNormal
, seçiliXrSystemId
'in ağ köşeleri için köşe normallerini destekleyip desteklemediğini belirten birXrBool32
bağımsız değişkenidir.
Sistem el örgüsü takibini desteklemediğinden, supportsHandMeshTracking
XR_FALSE
olduğunda uygulamanın el örgüsü özelliklerini kullanması uygun değildir. Bu durumda xrCreateHandMeshTrackerANDROID, XR_ERROR_FEATURE_UNSUPPORTED
değerini döndürür.
supportsHandMeshTracking
XR_TRUE
değerini döndürürse sistem el örgüsü takibini destekler. Uygulamalar, her karede xrGetHandMeshANDROID çağrısını yaparken el örgüsü arabelleklerine erişmek ve bunları oluşturma döngülerinde yeniden kullanmak için XrHandMeshANDROID::indexCount ve XrHandMeshANDROID::vertexCount değerlerini kullanmalıdır.
supportsTextureUV
XR_FALSE
döndürürse sistem, ağ köşeleri için doku UV'lerini desteklemez. Bu nedenle, bir uygulama xrGetHandMeshANDROID'ı çağırdığında XrHandMeshANDROID::textureUVs NULL
alır.
supportsVertexNormal
XR_FALSE
döndürürse sistem, ağ köşeleri için köşe normallerini desteklemez. Bu nedenle, bir uygulama xrGetHandMeshANDROID'ı çağırdığında XrHandMeshANDROID::normals NULL
alır.
Geçerli Kullanım (Dolayı)
- XrSystemHandMeshTrackingPropertiesANDROID özelliğini kullanmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. type
XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
El örgüsü takip aracı kolu oluşturma
XR_DEFINE_HANDLE(XrHandMeshTrackerANDROID)
XrHandMeshTrackerANDROID kolu, el örgüsü takibi ve ilgili kaynakları yönetmek için bir el örgüsü izleyiciyi temsil eder.
Bu herkese açık kullanıcı adı, bu uzantıdaki diğer işlevleri kullanarak el örgüsü arabelleklerine erişmek için kullanılabilinir.
Bir uygulama, xrCreateHandMeshTrackerANDROID işlevini kullanarak XrHandMeshTrackerANDROID işleyicisi oluşturabilir.
XrResult xrCreateHandMeshTrackerANDROID(
XrSession session,
const XrHandMeshTrackerCreateInfoANDROID* createInfo,
XrHandMeshTrackerANDROID* handMeshTracker);
Parametre Açıklamaları
session
, el ağ izleme cihazının etkin olacağı bir XrSession'dır.createInfo
, el örgüsü izleyiciyi belirtmek için kullanılan XrHandMeshTrackerCreateInfoANDROID yapısıdır.handMeshTracker
, döndürülen XrHandMeshTrackerANDROID kontrol çubuğudur.
Sistem el örgüsü takibini desteklemiyorsa xrCreateHandMeshTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED
değerini döndürür.
XrHandMeshTrackerANDROID herkese açık kullanıcı adı, el örgüsü izlemeyle ilgili tüm kaynaklara sahiptir. Uygulama, el örgüsü izleme deneyimlerini tamamladıktan sonra xrDestroyHandMeshTrackerANDROID işlevini kullanarak kullanıcının elini yok etmelidir.
Geçerli Kullanım (Dolayı)
- xrCreateHandMeshTrackerANDROID çağrılmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. session
geçerli bir XrSession herkese açık kullanıcı adı olmalıdır.createInfo
, geçerli bir XrHandMeshTrackerCreateInfoANDROID yapısının işaretçisi olmalıdır.handMeshTracker
, XrHandMeshTrackerANDROID mülkünün işaretçisi olmalıdır.
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTED
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_ERROR_LIMIT_REACHED
XrHandMeshTrackerCreateInfoANDROID yapısı, XrHandMeshTrackerANDROID işleyicisi oluşturmak için gereken bilgileri açıklar.
typedef struct XrHandMeshTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrHandMeshTrackerCreateInfoANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.
Geçerli Kullanım (Dolayı)
- XrHandMeshTrackerCreateInfoANDROID kullanılmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. type
XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.
xrDestroyHandMeshTrackerANDROID işlevi, el örgüsü izleme deneyimleri sona erdiğinde handMeshTracker
ve temel kaynakları serbest bırakır.
XrResult xrDestroyHandMeshTrackerANDROID(
XrHandMeshTrackerANDROID handMeshTracker);
Parametre Açıklamaları
handMeshTracker
, daha önce xrCreateHandMeshTrackerANDROID tarafından oluşturulmuş bir XrHandMeshTrackerANDROID öğesidir.
Geçerli Kullanım (Dolayı)
- xrDestroyHandMeshTrackerANDROID çağrılmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. handMeshTracker
, geçerli bir XrHandMeshTrackerANDROID kolu olmalıdır.
Thread Güvenliği
handMeshTracker
ve alt herkese açık kimliklere erişim, harici olarak senkronize edilmelidir.
İade Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
El ağlarını bulma
Uygulama, belirli bir zaman damgasındaki el örgüsünü almak için xrGetHandMeshANDROID işlevini kullanabilir. El örgüsünün köşe noktalarının konumu ve normal değeri, xrGetHandMeshANDROID çağrılırken XrHandMeshGetInfoANDROID::baseSpace tarafından belirtilen alanda temsil edilir.
XrResult xrGetHandMeshANDROID(
XrHandMeshTrackerANDROID handMeshTracker,
const XrHandMeshGetInfoANDROID* getInfo,
XrHandTrackingMeshesANDROID* handMeshes);
Parametre Açıklamaları
handMeshTracker
, daha önce xrCreateHandMeshTrackerANDROID ile oluşturulmuş bir XrHandMeshTrackerANDROID işleyicisidir.getInfo
, el örgüsü verilerini sorgulamak için gerekli bilgileri içeren bir XrHandMeshGetInfoANDROID yapısıdır.handMeshes
, el ağ verileri ile doldurulacak bir XrHandTrackingMeshesANDROID yapısının işaretçisidir.
Uygulama, çalışma zamanı tarafından oluşturulan el örgüsü arabelleklerine erişmek için xrGetHandMeshANDROID işlevini kullanabilir.
Uygulama, xrGetHandMeshANDROID çağrısından önce oturum sırasında en az bir kez xrBeginFrame çağrısı etmelidir.
Uygulamalar, her karede xrGetHandMeshANDROID çağrısı yaparken el örgüsü arabelleklerine erişmek ve bunları oluşturma döngülerinde yeniden kullanmak için XrHandMeshANDROID::indexCount ve XrHandMeshANDROID::vertexCount değerlerini kullanmalıdır.
Geçerli Kullanım (Dolayı)
- xrGetHandMeshANDROID çağrılmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. handMeshTracker
, geçerli bir XrHandMeshTrackerANDROID kolu olmalıdır.getInfo
, geçerli bir XrHandMeshGetInfoANDROID yapısının işaretçisi olmalıdırhandMeshes
, XrHandTrackingMeshesANDROID yapısına işaret eden bir olmalıdır
İade Kodları
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_HANDLE_INVALID
XR_ERROR_SIZE_INSUFFICIENT
XR_ERROR_TIME_INVALID
XrHandMeshGetInfoANDROID, el örgüsü verilerini almak için gereken bilgileri açıklar.
typedef struct XrHandMeshGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
} XrHandMeshGetInfoANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.baseSpace
,time
'daki köşe noktalarının dönüştürme işleminin bulunacağı referans uzayı tanımlayan bir XrSpace bağımsız değişkenidir.time
, uygulamanın el örgüsünü sorgulamak istediği zamanı açıklayanXrTime
bağımsız değişkenidir.
Geçerli Kullanım (Dolayı)
- XrHandMeshGetInfoANDROID işlevi kullanılmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. type
XR_TYPE_HAND_MESH_GET_INFO_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.baseSpace
geçerli bir XrSpace herkese açık kullanıcı adı olmalıdır.
XrHandTrackingMeshesANDROID yapısı, her iki elin de ağ verilerini içerir.
typedef struct XrHandTrackingMeshesANDROID {
XrStructureType type;
void* next;
XrHandMeshANDROID leftHandMesh;
XrHandMeshANDROID rightHandMesh;
} XrHandTrackingMeshesANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.leftHandMesh
, sol el için XrHandMeshANDROID öğesidir.rightHandMesh
, sağ el için XrHandMeshANDROID öğesidir.
Geçerli Kullanım (Dolayı)
- XrHandTrackingMeshesANDROID kullanılacaksa
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. type
XR_TYPE_HAND_TRACKING_MESHES_ANDROID
olmalıdırnext
NULL
veya yapı zincirindeki sonraki yapıya işaret eden geçerli bir işaretçi olmalıdır.leftHandMesh
geçerli bir XrHandMeshANDROID yapısı olmalıdır.rightHandMesh
geçerli bir XrHandMeshANDROID yapısı olmalıdır.
XrHandMeshANDROID yapısı, bir el için xrGetHandMeshANDROID işlevinden el örgüsü izleme verilerini almak üzere veriler ve arabellekler içerir.
typedef struct XrHandMeshANDROID {
XrBool32 isActive;
XrTime dynamicLastUpdateTime;
uint32_t indexCount;
uint32_t vertexCount;
const uint32_t* indices;
const XrVector2f* textureUVs;
const XrVector3f* positions;
const XrVector3f* normals;
XrPosef baseSpaceFromVertexSpace;
} XrHandMeshANDROID;
Üye Açıklamaları
type
, bu yapının XrStructureType değeridir.next
,NULL
veya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'da veya bu uzantıda böyle bir yapı tanımlanmamıştır.isActive
, mevcut el örgüsü izleyicinin etkin olup olmadığını ve örgülü verilerin geçerli olup olmadığını belirten birXrBool32
değeridir.dynamicLastUpdateTime
, dinamik arabelleklerin son güncellenme zamanını belirtenXrTime
bağımsız değişkenidir.indexCount
, el örgüsününindices
sayısı olarak hizmet veren biruint32_t
bağımsız değişkenidir.vertexCount
, el örgüsündekipositions
sayısı olarak hizmet veren biruint32_t
bağımsız değişkenidir. Sistem tarafından desteklendiğindetextureUVs
veyanormals
için de kullanılabilir.indices
, saat yönünün tersine sarma sırasına göre üçgenlerin ızgara dizelerini temsil eden biruint32_t
dizisidir. İşaretlenen değerlerin sayısıindexCount
.textureUVs
,NULL
veya köşe doku koordinatlarını temsil eden birXrVector2f
dizisidir. İşaretlenen değerlerin sayısıvertexCount
'tür.positions
,baseSpaceFromVertexSpace
içindeki köşe konumlarını temsil eden birXrVector3f
dizisidir. İşaretlenen değerlerin sayısıvertexCount
'tür.normals
,baseSpaceFromVertexSpace
'daki köşe normallerini temsil eden birNULL
veyaXrVector3f
dizisidir. İşaretlenen değerlerin sayısıvertexCount
'tür.baseSpaceFromVertexSpace
, xrGetHandMeshANDROID çağrılırken XrHandMeshGetInfoANDROID::baseSpace içinde bulunan XrSpace köşesidir. Uygulamalar, oluşturma sırasında ağ köşe noktalarının ve normallerinin koordinat alanını dönüştürmek için bunu kullanabilir.
El örgüsü, üçgen listeleriyle temsil edilir ve her üçgenin tepe noktaları, elin dışından bakıldığında saat yönünün tersine sırayladır.
Döndürülen isActive
değeri XR_FALSE
olduğunda, elin etkin bir şekilde izlenmediğini gösterir. Örneğin, el sensörün aralığının dışındadır, giriş odağı uygulamadan kaldırılmıştır veya uygulamanın el izleme verilerine erişme izni yoktur.
Döndürülen isActive
değeri XR_TRUE
olduğunda, sistem tarafından destekleniyorsa textureUVs
ve normals
dahil olmak üzere indices
ve positions
'de temsil edilen el izleme örgüsü, xrGetHandMeshANDROID işlevine verilen XrHandMeshGetInfoANDROID::time değerinin en son verileriyle güncellenir.
XrHandMeshANDROID işlevinde döndürülen el örgüsü arabelleklerinin işaret ettiği bellek, çalışma zamanından alınır ve uygulamayla paylaşılır. XrHandMeshTrackerANDROID işleyicisi geçerliyken xrBeginFrame çağrısı yapılana kadar belleğe herhangi bir mesaj dizisinden erişilebilir.
indices
vetextureUVs
tarafından işaretlenen değerler dinamik değildir.- İşaretçi ve
positions
ilenormals
tarafından işaretlenen değerler xrBeginFrame çağrıları arasında dinamik olarak değişebilir. Uygulama, değerlerin son çerçeveden bu yana değişip değişmediğini kontrol etmek ve değişiklik olmadığında gereksiz veri işlemeyi önlemek içindynamicLastUpdateTime
'yi kullanabilir.
Geçerli Kullanım (Dolayı)
- XrHandMeshANDROID özelliğini kullanmadan önce
XR_ANDROID_hand_mesh
uzantısı etkinleştirilmelidir. indices
geçerli biruint32_t
değerine işaret eden bir işaretçi olmalıdır.textureUVs
, geçerli bir XrVector2f yapısının işaretçisi olmalıdır.positions
, geçerli bir XrVector3f yapısının işaretçisi olmalıdır.normals
, geçerli bir XrVector3f yapısının işaretçisi olmalıdır.
El örgüsü izleme için örnek kod
Aşağıdaki örnek kodda, oluşturma için el ağ geçitlerine nasıl erişileceği gösterilmektedir.
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_xrCreateHandMeshTrackerANDROID xrCreateHandMeshTrackerANDROID; // previously initialized
PFN_xrDestroyHandMeshTrackerANDROID xrDestroyHandMeshTrackerANDROID; // previously initialized
PFN_xrGetHandMeshANDROID xrGetHandMeshANDROID; // previously initialized
// Inspect system capability
XrSystemHandMeshTrackingPropertiesANDROID handMeshTrackingProps = {
.type = XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &handMeshTrackingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!handMeshTrackingProps.supportsHandMeshTracking) {
// hand mesh tracking is not supported.
return;
}
XrHandMeshTrackerCreateInfoANDROID trackerCreateInfo = {
.type = XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
};
XrHandMeshTrackerANDROID handMeshTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateHandMeshTrackerANDROID(
session, &trackerCreateInfo, &handMeshTracker));
// app update loop
while (true) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// ...
XrHandMeshGetInfoANDROID getInfo = {
.type = XR_TYPE_HAND_MESH_GET_INFO_ANDROID,
.baseSpace = appPlaySpace,
.time = time,
};
XrHandTrackingMeshesANDROID handMeshes = {
.type = XR_TYPE_HAND_TRACKING_MESHES_ANDROID
};
CHK_XR(xrGetHandMeshANDROID(handMeshTracker, &getInfo, &handMeshes));
if (handMeshes.leftHandMesh.isActive) {
// access vertex/index buffers for rendering.
}
// ...
// Finish frame loop
// ...
}
CHECK_XR(xrDestroyHandMeshTracker(handMeshTracker));
Yeni Nesne Türleri
Yeni Enum Constants
XrObjectType dizini aşağıdakilerle genişletildi:
XR_OBJECT_TYPE_HAND_MESH_TRACKER_ANDROID
XrStructureType dizini aşağıdakilerle genişletildi:
XR_TYPE_SYSTEM_HAND_MESH_TRACKING_PROPERTIES_ANDROID
XR_TYPE_HAND_MESH_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_HAND_MESH_GET_INFO_ANDROID
XR_TYPE_HAND_TRACKING_MESHES_ANDROID
Yeni Sıralamalar
Yeni Yapılar
- XrSystemHandMeshTrackingPropertiesANDROID
- XrHandMeshTrackerCreateInfoANDROID
- XrHandMeshGetInfoANDROID
- XrHandMeshANDROID
- XrHandTrackingMeshesANDROID
Yeni İşlevler
Sorunlar
Sürüm Geçmişi
- Düzeltme 1, 10.09.2024 (Levana Chen)
- İlk uzantı açıklaması