Name String
XR_ANDROID_eye_tracking
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
457
Düzeltme
1
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2025-01-17
IP Durumu
Bilinen bir IP hak talebi yok.
Katkıda bulunanlar
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Genel Bakış
Bu uzantı, uygulamaların kullanıcının gözlerinin konumunu ve yönünü, ayrıca göz takibi durumunu elde etmesini sağlar.
Göz izleme verileri iki modda sağlanır: kaba ve ince. Kaba izleme, kullanıcının gözleriyle ilgili kaba bir tahmin sağlarken ince izleme daha doğru bir tahmin sağlar. Kaba izleme, temel bir avatar benzeri temsil sağlamak isteyen uygulamalar için tasarlanmıştır. İnce izleme ise daha hassas uygulamalar için tasarlanmıştır.
Etkileşim için XR_EXT_eye_gaze_interaction kullanılmalıdır.
Sistem kapasitesini inceleme
XrSystemEyeTrackingPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Üye Açıklamaları
type, bu yapınınXrStructureType.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.supportsEyeTracking, mevcut sistemin göz takibini destekleyip desteklemediğini gösteren birXrBool32'dir.
Bir uygulama, xrGetSystemProperties çağrılırken XrSystemEyeTrackingPropertiesANDROID yapısını XrSystemProperties'e zincirleyerek sistemin göz izleme özelliğine sahip olup olmadığını kontrol edebilir. supportsEyeTracking, XR_FALSE değerini döndürürse uygulama, xrCreateEyeTrackerANDROID kaynağından XR_ERROR_FEATURE_UNSUPPORTED değerini alır.
Geçerli Kullanım (Dolaylı)
XrSystemEyeTrackingPropertiesANDROIDkullanılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.typekesinlikleXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
Göz takip cihazı tutma yeri oluşturma
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
XrEyeTrackerANDROID kolu, gözleri izlemek için kullanılan bir göz izleyiciyi temsil eder ve kullanıcının baktığı yeri doğru şekilde eşler.
Göz izleme verileri hassas kişisel bilgiler olabilir ve kişisel gizlilik ile bütünlükle yakından bağlantılıdır. Göz izleme verilerini depolayan veya aktaran uygulamaların, bunu yapabilmek için her zaman kullanıcıdan aktif ve spesifik kabul istemesi önemle tavsiye edilir.
Bu tutma noktası, bu uzantıdaki diğer işlevler kullanılarak göz izleme verilerine erişmek için kullanılabilir.
Göz takibi, sahnedeki göz pozunu ve durumunu gösterir.
xrCreateEyeTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Parametre Açıklamaları
session, göz takibinin etkin olacağı birXrSessionkoludur.createInfo, göz izlemeyi belirtmek için kullanılanXrEyeTrackerCreateInfoANDROIDdeğeridir.eyeTracker, döndürülenXrEyeTrackerANDROIDtutma yeridir.
Bir uygulama, xrCreateEyeTrackerANDROID işlevini kullanarak XrEyeTrackerANDROID kullanıcı adı oluşturabilir.
Sistem göz takibini desteklemiyorsa XR_ERROR_FEATURE_UNSUPPORTED
xrCreateEyeTrackerANDROID tarafından döndürülür.
Geçerli Kullanım (Dolaylı)
xrCreateEyeTrackerANDROIDişlevi çağrılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.session, geçerli birXrSessionherkese açık kullanıcı adı olmalıdır.createInfo, geçerli birXrEyeTrackerCreateInfoANDROIDyapısına yönelik bir işaretçi olmalıdır.eyeTracker, mutlaka birXrEyeTrackerANDROIDtanıtıcısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_FEATURE_UNSUPPORTED
XrEyeTrackerCreateInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Üye Açıklamaları
type, bu yapınınXrStructureType.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
XrEyeTrackerCreateInfoANDROID yapısı, XrEyeTrackerANDROID kullanıcı adı oluşturmak için gereken bilgileri açıklar.
Geçerli Kullanım (Dolaylı)
XrEyeTrackerCreateInfoANDROIDkullanılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.typekesinlikleXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
xrDestroyEyeTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Parametre Açıklamaları
eyeTracker, daha öncexrCreateEyeTrackerANDROIDtarafından oluşturulan birXrEyeTrackerANDROID.
xrDestroyEyeTrackerANDROID işlevi, göz izleme deneyimleri tamamlandığında eyeTracker ve temel kaynakları serbest bırakır.
Geçerli Kullanım (Dolaylı)
xrDestroyEyeTrackerANDROIDişlevi çağrılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.eyeTracker, geçerli birXrEyeTrackerANDROIDkullanıcı adı olmalıdır.
İş parçacığı güvenliği
eyeTrackerve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Gözler hakkında bilgi edinme
xrGetCoarseTrackingEyesInfoANDROID işlevi şu şekilde tanımlanır:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Parametre Açıklamaları
eyeTracker, daha öncexrCreateEyeTrackerANDROIDtarafından oluşturulan birXrEyeTrackerANDROID.getInfo, hangi çıkışın gerekli olduğunu belirtmek için kullanılanXrEyesGetInfoANDROIDişaretçisidir.infoOutput, pozlar ve durumlar dahil olmak üzere döndürülen göz bilgilerini içerenXrEyesANDROIDöğesine yönelik bir işaretçidir.
xrGetCoarseTrackingEyesInfoANDROID işlevi, göz durumları ve pozisyonlarıyla ilgili bilgileri kullanıcı gizliliğini koruyacak şekilde alır.
Çalışma zamanı, uygulamanın android.permission.EYE_TRACKING_COARSE izni yoksa XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir.
Gözlerle ilgili bilgiler, xrGetCoarseTrackingEyesInfoANDROID çağrısı sırasında XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace kullanılarak çözülür ve temel alana göre belirlenir.
Göz pozunun hem konumu hem de yönü herhangi bir zamanda izlenebilir veya izlenemez. Bu, uygulamaların hem XR_SPACE_LOCATION_POSITION_TRACKED_BIT hem de XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT'nin sağlanan XrEyesANDROID::eyes üzerinde ayarlanmasını veya temizlenmesini bekleyebileceği ve XrEyesANDROID::mode'nin izleme durumlarını göstereceği anlamına gelir.
Geçerli Kullanım (Dolaylı)
xrGetCoarseTrackingEyesInfoANDROIDişlevi çağrılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.eyeTracker, geçerli birXrEyeTrackerANDROIDherkese açık kullanıcı adı olmalıdır.getInfo, geçerli birXrEyesGetInfoANDROIDyapısına yönelik bir işaretçi olmalıdır.eyesOutput,XrEyesANDROIDyapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
xrGetFineTrackingEyesInfoANDROID
fonksiyonu şu şekilde tanımlanır:
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Parametre Açıklamaları
eyeTracker, daha öncexrCreateEyeTrackerANDROIDtarafından oluşturulan birXrEyeTrackerANDROID.getInfo, hangi çıkışın gerekli olduğunu belirtmek için kullanılanXrEyesGetInfoANDROIDişaretçisidir.infoOutput, pozlar ve durumlar dahil olmak üzere döndürülen göz bilgilerini içerenXrEyesANDROIDöğesine yönelik bir işaretçidir.xrGetFineTrackingEyesInfoANDROIDişlevi, göz durumları ve pozlar hakkındaxrGetCoarseTrackingEyesInfoANDROIDişlevine kıyasla daha yüksek hassasiyetle bilgi alır.
Çalışma zamanı, uygulamanın android.permission.EYE_TRACKING_FINE izni yoksa XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir.
Gözlerle ilgili bilgiler, xrGetFineTrackingEyesInfoANDROID çağrısı sırasında XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace kullanılarak çözülür ve temel alana göre belirlenir.
Göz pozunun hem konumu hem de yönü herhangi bir zamanda izlenebilir veya izlenemez. Bu, uygulamaların hem XR_SPACE_LOCATION_POSITION_TRACKED_BIT hem de XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT'nin sağlanan XrEyesANDROID::eyes üzerinde ayarlanmasını veya temizlenmesini bekleyebileceği ve XrEyesANDROID::mode'nin izleme durumlarını göstereceği anlamına gelir.
Geçerli Kullanım (Dolaylı)
xrGetFineTrackingEyesInfoANDROIDişlevi çağrılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.eyeTracker, geçerli birXrEyeTrackerANDROIDherkese açık kullanıcı adı olmalıdır.getInfo, geçerli birXrEyesGetInfoANDROIDyapısına yönelik bir işaretçi olmalıdır.eyesOutput,XrEyesANDROIDyapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
XrEyesGetInfoANDROID yapısı, göz pozlarını ve durumlarını almak için gereken bilgileri içerir.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Üye Açıklamaları
type, bu yapınınXrStructureType.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.time,baseSpace'e göre koordinatların değerlendirileceğiXrTime'dır.baseSpacegöz pozu,timekonumundaki buXrSpaceile ilgili olacaktır.
Geçerli Kullanım (Dolaylı)
XrEyesGetInfoANDROIDkullanılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.typekesinlikleXR_TYPE_EYES_GET_INFO_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.baseSpace, geçerli birXrSpaceherkese açık kullanıcı adı olmalıdır.
XrEyesANDROID yapısı, takip edilen gözlerle ilgili bilgileri içerir.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Üye Açıklamaları
type, bu yapınınXrStructureType.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.eyes,XrEyeIndexANDROIDile dizine eklenmiş sol ve sağ gözler içinXrEyeANDROIDdizisidir.mode, gözlerin takip edip etmediğini ve hangilerinin takip ettiğini belirtenXrEyeTrackingModeANDROIDdeğeridir.
Geçerli Kullanım (Dolaylı)
XrEyesANDROIDkullanılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.typekesinlikleXR_TYPE_EYES_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.eyesöğesinin herhangi bir öğesi geçerli birXrEyeANDROIDyapısı olmalıdır.modegeçerli birXrEyeTrackingModeANDROIDdeğeri olmalıdır.
XrEyeANDROID yapısı, bir gözün durumunu, konumunu ve yönünü açıklar.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Üye Açıklamaları
eyeState, gözünXrEyeStateANDROIDkısmıdır.pose, ilgiliXrEyesGetInfoANDROID::baseSpacereferans çerçevesi içinde bir gözün başlangıç noktasının konumunu ve yönünü tanımlayan birXrPosef'dir. Buradaki kimlik yönü, +Z kullanıcının gözlerine, +X sağa ve +Y yukarı bakacak şekilde koordinat eksenlerini temsil eder.
Geçerli Kullanım (Dolaylı)
XrEyeANDROIDkullanılmadan önceXR_ANDROID_eye_trackinguzantısı etkinleştirilmelidir.eyeStategeçerli birXrEyeStateANDROIDdeğeri olmalıdır.
XrEyeStateANDROID numaralandırması, izlenen gözlerin farklı durumlarını tanımlar.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum |
Açıklama |
|
Gözün hata durumunda olduğunu veya mevcut olmadığını gösterir. |
|
Gözün baktığını gösterir. |
|
Gözün, göz kırpma veya göz kapama nedeniyle kapalı olduğunu gösterir. |
XrEyeIndexANDROID numaralandırması, sol veya sağ gözün dizinini tanımlar.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum |
Açıklama |
|
Sol göz. |
|
Sağ göz. |
XrEyeTrackingModeANDROID numaralandırması, izlenen gözlerin farklı modlarını tanımlar.
typedef enum XrEyeTrackingModeANDROID {
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID = 0,
XR_EYE_TRACKING_MODE_RIGHT_ANDROID = 1,
XR_EYE_TRACKING_MODE_LEFT_ANDROID = 2,
XR_EYE_TRACKING_MODE_BOTH_ANDROID = 3
} XrEyeTrackingModeANDROID;
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum |
Açıklama |
|
Göz takibinin etkin olmadığını gösterir. |
|
Yalnızca sağ gözün izlendiğini gösterir. |
|
Yalnızca sol gözün izlendiğini gösterir. |
|
Hem sol hem de sağ gözün izlendiğini gösterir. |
Göz takibi için örnek kod
Aşağıdaki örnek kodda, bir görünüm alanına göre göz bilgilerinin nasıl alınacağı gösterilmektedir.
XrSession session; // previously initialized, e.g. created at app startup.
XrSpace viewSpace; // space created for XR_REFERENCE_SPACE_TYPE_VIEW.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateEyeTrackerANDROID xrCreateEyeTrackerANDROID; // previously initialized
PFN_xrDestroyEyeTrackerANDROID xrDestroyEyeTrackerANDROID; // previously initialized
PFN_xrGetCoarseTrackingEyesInfoANDROID xrGetCoarseTrackingEyesInfoANDROID; // previously initialized
PFN_xrGetFineTrackingEyesInfoANDROID xrGetFineTrackingEyesInfoANDROID; // previously initialized
// This will use the XrSession that is bound to the eye tracker done at time of creation.
XrEyeTrackerANDROID eyeTracker;
XrEyeTrackerCreateInfoANDROID createInfo{
.type = XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID,
.next = nullptr};
CHK_XR(xrCreateEyeTrackerANDROID(session, &createInfo, &eyeTracker));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrEyesANDROID fineEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesANDROID coarseEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesGetInfoANDROID eyesGetInfo{.type = XR_TYPE_EYES_GET_INFO_ANDROID,
.next = nullptr,
.time = time,
.baseSpace = viewSpace};
CHK_XR(xrGetCoarseTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &coarseEyesInfo));
CHK_XR(xrGetFineTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &fineEyesInfo));
// eyes tracking information is now available:
// drawLeftEye(eyesInfo.eyes[XR_EYE_INDEX_LEFT_ANDROID].eyePose);
// drawRightEye(eyesInfo.eyes[XR_EYE_INDEX_RIGHT_ANDROID].eyePose);
// ...
// Finish frame loop
// ...
}
// after usage
CHK_XR(xrDestroyEyeTrackerANDROID(eyeTracker));
Yeni Nesne Türleri
Yeni Enum Sabitleri
XR_EYE_MAX_ANDROID
XrObjectType numaralandırması şu öğelerle genişletilir:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
XrStructureType numaralandırması şu öğelerle genişletilir:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Yeni sıralamalar
Yeni Yapılar
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
Yeni İşlevler
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
Sorunlar
Sürüm Geçmişi
- Düzeltme 1, 2025-01-17 (Kenny Vercaemer)
- İlk uzantı açıklaması
OpenXR™ ve OpenXR logosu, The Khronos Group Inc. şirketinin ticari markalarıdır ve Çin, Avrupa Birliği, Japonya ve Birleşik Krallık'ta ticari marka olarak tescillidir.