XR_ANDROID_light_estimation
Name String
XR_ANDROID_light_estimation
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
701
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2025-03-13
IP Durumu
Bilinen IP hak talebi yok.
Katkıda bulunanlar
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Genel Bakış
Bu uzantı, uygulamanın başlığın etrafındaki gerçek dünya ortamının ışığını temsil eden verileri istemesine olanak tanır. Uygulama, bu bilgileri kullanarak sanal nesneleri yerleştirildikleri gerçek dünya sahnesiyle aynı koşullarda aydınlatabilir.
İzinler
Bu uzantı, ortamla ilgili aydınlatma bilgilerini sunduğundan Android uygulamalarının manifestlerinde android.permission.SCENE_UNDERSTANDING_COARSE izninin listelenmesi gerekir. android.permission.SCENE_UNDERSTANDING_COARSE izni tehlikeli bir izin olarak kabul edilir. Uygulama, bu işlevleri kullanmak için çalışma zamanında izni istemelidir:
(Koruma düzeyi: tehlikeli)
Sistem kapasitesini inceleme
XrSystemLightEstimationPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.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.supportsLightEstimation, geçerli sistemin ışık tahminini destekleyip desteklemediğini belirten birXrBool32değeridir.
Bir uygulama, xrGetSystemProperties çağrılırken XrSystemProperties'i XrSystemLightEstimationPropertiesANDROID yapısıyla genişleterek sistemin ışık tahmini özelliğini destekleyip desteklemediğini kontrol edebilir .
Yalnızca bir çalışma zamanı supportsLightEstimation için XR_FALSE döndürürse çalışma zamanı , xrCreateLightEstimatorANDROID işlevinden XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_light_estimationuzantısı, XrSystemLightEstimationPropertiesANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain
Işık tahmin aracı oluşturma
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
Işık tahmini verileri çalışma zamanı tarafından oluşturulur ve XrLightEstimatorANDROID tutma yeri kullanılarak uygulamayla paylaşılır.
Bu tutma yeri, bu uzantıdaki diğer işlevler kullanılarak ışık tahmini bilgilerine erişmek için kullanılabilir.
xrCreateLightEstimatorANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Parametre Açıklamaları
session, ışık tahmincisini oluşturan XrSession'dır.createInfo, ışık tahmin ediciyi oluşturmak için kullanılacak parametreleri içeren bir XrLightEstimatorCreateInfoANDROID yapısının işaretçisidir.outHandle, oluşturulan XrLightEstimatorANDROID'in döndürüldüğü bir tutamaç işaretçisidir.
Uygulama, ışık tahmin aracı oluşturmak için xrCreateLightEstimatorANDROID işlevini kullanır.
- Sistem ışık tahminini desteklemiyorsa çalışma zamanı mutlaka
XR_ERROR_FEATURE_UNSUPPORTEDdeğerini döndürmelidir. - Çalışma zamanı, gerekli izinler arayan uygulamaya verilmediyse mutlaka
XR_ERROR_PERMISSION_INSUFFICIENTdeğerini döndürmelidir.
Bir uygulama, ışık tahmini verilerine erişimi tamamladığını çalışma zamanına bildirmek istiyorsa xrDestroyLightEstimatorANDROID aracılığıyla tutma yerini kaldırmalıdır .
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_light_estimationuzantısı, xrCreateLightEstimatorANDROID çağrılmadan önce etkinleştirilmelidir. -
sessiongeçerli bir XrSession işleyeni olmalıdır. -
createInfoXrLightEstimatorCreateInfoANDROID yapısına yönelik bir işaretçi olmalıdır. -
outHandleXrLightEstimatorANDROID tutamacına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
XrLightEstimatorCreateInfoANDROID yapısı, XrLightEstimatorANDROID tutacını oluşturmak için gereken bilgileri açıklar.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrLightEstimatorCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.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.
Geçerli Kullanım (Dolaylı)
- XrLightEstimatorCreateInfoANDROID kullanılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
typeXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain . Ayrıca: XrCubemapLightEstimatorCreateInfoANDROID , XrPointLightsEstimatorCreateInfoANDROIDX1
xrDestroyLightEstimatorANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Parametre Açıklamaları
estimator, daha önce xrCreateLightEstimatorANDROID tarafından oluşturulan bir XrLightEstimatorANDROID'dir .
xrDestroyLightEstimatorANDROID işlevi, estimator ve temel kaynakları serbest bırakır.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_light_estimationuzantısı, xrDestroyLightEstimatorANDROID çağrılmadan önce etkinleştirilmelidir. -
estimatorgeçerli bir XrLightEstimatorANDROID tutma yeri olmalıdır.
Thread Safety
estimatorve 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
Işık tahmini verilerine erişme
xrGetLightEstimateANDROID işlevi şu şekilde tanımlanır:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Parametre Açıklamaları
estimator, daha önce xrCreateLightEstimatorANDROID ile oluşturulmuş bir XrLightEstimatorANDROID tutamağıdır .input, XrLightEstimateGetInfoANDROID yapısına yönelik bir işaretçidir.output, XrLightEstimateANDROID yapısına yönelik bir işaretçidir.
Geçerli Kullanım (Dolaylı)
- xrGetLightEstimateANDROID çağrılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
estimatorgeçerli bir XrLightEstimatorANDROID tutma yeri olmalıdır. -
inputgeçerli bir XrLightEstimateGetInfoANDROID yapısının işaretçisi olmalıdır. -
outputXrLightEstimateANDROID yapısına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrLightEstimateGetInfoANDROID yapısı şu şekilde tanımlanır:
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.space, döndürülen ışık yönünün ve küresel harmoniklerin ifade edildiği referans alanını tanımlayan XrSpace'tir.time, uygulamanın ışık tahmini sorgulamak istediği zamanı açıklayanXrTimedeğeridir.
Geçerli Kullanım (Dolaylı)
- XrLightEstimateGetInfoANDROID kullanılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
typeXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
spaceGeçerli bir XrSpace hesabı olmalıdır.
XrLightEstimateANDROID yapısı, ışık tahmini verilerini içerir:
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Geçerli yapılar arasında XrAmbientLightANDROID , XrSphericalHarmonicsANDROID ve XrDirectionalLightANDROID yer alır .state, ışık tahmini durumunu temsil eden XrLightEstimateStateANDROID değeridir.lastUpdatedTime, tahminin en son ne zaman hesaplandığını gösterenXrTimedeğeridir.
Her ışık tahmini yapısı için state alanı XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID ise yapıdaki diğer tüm alanlar rastgeledir. Yani değerleri tanımlanmamıştır.
Ortam ışığı, küresel harmonikler ve birincil yönlü ışık için ışık tahmini bilgilerini almak üzere uygulamalar, sırasıyla XrAmbientLightANDROID, XrSphericalHarmonicsANDROID ve XrDirectionalLightANDROID yapılarını XrLightEstimateANDROID :: next ile zincirleyebilir.
Geçerli Kullanım (Dolaylı)
- XrLightEstimateANDROID kullanılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
typeXR_TYPE_LIGHT_ESTIMATE_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain . Ayrıca bkz: XrAmbientLightANDROID , XrCubemapLightingDataANDROID , XrDirectionalLightANDROID , XrPointLightsANDROIDX1 , XrSphericalHarmonicsANDROID -
stategeçerli bir XrLightEstimateStateANDROID değeri olmalıdır.
XrAmbientLightANDROID yapısı, sahnedeki ambiyans ışığıyla ilgili ışık tahmini verilerini içerir.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Geçerli yapılar arasında XrSphericalHarmonicsANDROID ve XrDirectionalLightANDROID yer alır .state, ışık tahmini durumunu temsil eden XrLightEstimateStateANDROID değeridir.intensity, ambiyans ışığının yoğunluğunu temsil eden bir XrVector3f'dir. Vektörün her bileşeni sırasıyla kırmızı, yeşil ve mavi kanallara karşılık gelir.colorCorrection, gama alanındaki değerlere sahip bir XrVector3f'dir. Gama renk alanında oluşturuluyorsa oluşturma işleminden sonra nihai hesaplanan renge karşı bileşen bazında çarpın. Doğrusal alanda oluşturuluyorsa önce değerleri 2, 2 kuvvetini alarak doğrusal alana dönüştürün, ardından oluşturma işleminden sonra bileşen bazında nihai hesaplanmış renkle çarpın.The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
Geçerli Kullanım (Dolaylı)
- XrAmbientLightANDROID kullanılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
typeXR_TYPE_AMBIENT_LIGHT_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
stategeçerli bir XrLightEstimateStateANDROID değeri olmalıdır.
XrSphericalHarmonicsANDROID yapısı, sahnenin aydınlatmasını temsil eden küresel harmonikleri içerir.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Geçerli yapılar arasında XrAmbientLightANDROID ve XrDirectionalLightANDROID yer alır .state, ışık tahmini durumunu temsil eden XrLightEstimateStateANDROID değeridir.kind, uygulama tarafından istenen XrSphericalHarmonicsKindANDROID'dir.coefficients, 9 satır ve 3 sütun boyutlarına sahip iki boyutlu birfloatdizisidir. Sırasıyla kırmızı, yeşil ve mavi renk kanallarına karşılık gelen 3 sütun. Her kanalın 9 küresel harmonik katsayısı vardır.
coefficients, giriş olarak yön alan ve o yönden gelen ışığın rengini çıkış olarak veren özel bir işlevde kullanılmalıdır. Daha fazla ayrıntıyı bu makalede bulabilirsiniz .
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_light_estimationuzantısı, XrSphericalHarmonicsANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SPHERICAL_HARMONICS_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
stategeçerli bir XrLightEstimateStateANDROID değeri olmalıdır. -
kindgeçerli bir XrSphericalHarmonicsKindANDROID değeri olmalıdır.
XrSphericalHarmonicsKindANDROID numaralandırması, uygulamanın hangi tür küresel harmonikler istediğini çalışma zamanına bildirir.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1,
XR_SPHERICAL_HARMONICS_KIND_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSphericalHarmonicsKindANDROID;
Numaralandırma değerleri aşağıdaki anlamlara sahiptir:
Enum Açıklaması
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
Küresel harmonik katsayılar, ana ışığın katkısı hariç olmak üzere ortam ışığı ışıma işlevini temsil eder.
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
Küresel harmonik katsayılar, ana ışığın katkısı da dahil olmak üzere ortam ışığı ışıma işlevini temsil eder.
XrDirectionalLightANDROID yapısı, ışık tahmini verilerini içerir.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Geçerli yapılar arasında XrAmbientLightANDROID , XrSphericalHarmonicsANDROID ve XrDirectionalLightANDROID yer alır .state, ışık tahmini durumunu temsil eden XrLightEstimateStateANDROID değeridir.intensity, yönlü ışığın yoğunluğunu temsil eden bir XrVector3f'dir. Vektörün her bileşeni kırmızı, yeşil ve mavi kanallara karşılık gelir.direction, ışık yönünü temsil eden bir XrVector3f'dir.
Geçerli Kullanım (Dolaylı)
- XrDirectionalLightANDROID kullanılmadan önce
XR_ANDROID_light_estimationuzantısı etkinleştirilmelidir. -
typeXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
stategeçerli bir XrLightEstimateStateANDROID değeri olmalıdır.
XrLightEstimateStateANDROID numaralandırması, çalışma zamanı tarafından döndürülen ışık tahmininin durumunu gösterir.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1,
XR_LIGHT_ESTIMATE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrLightEstimateStateANDROID;
Numaralandırma değerleri aşağıdaki anlamlara sahiptir:
Enum Açıklaması
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
Işık tahmini geçerli
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
Işık tahmini geçersiz
Işık tahmini için örnek kod
Aşağıdaki örnek kod, çalışma zamanında olası tüm ışık tahmini miktarlarının nasıl alınacağını gösterir.
XrSession session; // Created at app startup
XrSpace appSpace; // Created previously.
PFN_xrCreateLightEstimatorANDROID xrCreateLightEstimatorANDROID; // Created previously.
PFN_xrDestroyLightEstimatorANDROID xrDestroyLightEstimatorANDROID; // Created previously.
PFN_xrGetLightEstimateANDROID xrGetLightEstimateANDROID; // Created previously.
XrLightEstimatorANDROID estimator;
XrLightEstimatorCreateInfoANDROID createInfo = {
.type = XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID};
CHK_XR(xrCreateLightEstimatorANDROID(session, &createInfo, &estimator));
// Every frame
XrTime updateTime; // Time used for the current frame's simulation update.
XrLightEstimateGetInfoANDROID info = {
.type = XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID,
.space = appSpace,
.time = updateTime,
};
XrDirectionalLightANDROID directionalLight = {
.type = XR_TYPE_DIRECTIONAL_LIGHT_ANDROID,
};
XrSphericalHarmonicsANDROID sphericalHarmonics = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.next = &directionalLight,
};
// Querying both TOTAL or AMBIENT spherical harmonics in one call will result in an error because chaining two structs with the same type is not allowed
bool useTotalSH;
if (useTotalSH) {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID;
} else {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID;
}
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &sphericalHarmonics,
};
XrLightEstimateANDROID estimate = {
.type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
.next = &ambientLight,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use directionalLight, totalSh, ambientSh, ambientLight if each
// struct has a valid state field
}
// When you want to disable light estimation
CHK_XR(xrDestroyLightEstimatorANDROID(estimator));
Yeni Nesne Türleri
Yeni Komutlar
Yeni Yapılar
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
XrLightEstimateANDROID uzatma :
XrSystemProperties'i genişletme :
Yeni Sıralamalar
Yeni Numaralandırılmış Değer Sabitleri
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONXrObjectType'i genişletme :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
XrStructureType'ı genişletme :
XR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
Sayılar
Sürüm Geçmişi
1. düzeltme, 16.09.2024 (Cairn Overturf)
- İlk uzantı açıklaması