Cadena de nombre
XR_ANDROID_light_estimation
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
701
Revisión
1
Dependencias de extensiones y versiones
Fecha de última modificación
2024-09-18
Estado de la IP
No hay reclamos de IP conocidos.
Colaboradores
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Descripción general
Esta extensión permite que la aplicación solicite datos que representen la iluminación del entorno real alrededor de los auriculares. Esta información se puede usar cuando se renderizan objetos virtuales para iluminarlos en las mismas condiciones que la escena en la que se colocan.
Cómo inspeccionar la capacidad del sistema
Una aplicación puede inspeccionar si el sistema admite la estimación de luz encadenando una estructura XrSystemLightEstimationPropertiesANDROID a XrSystemProperties cuando se llama a xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.supportsLightEstimation
es unXrBool32
, que indica si el sistema actual admite la estimación de luz.
Una aplicación puede inspeccionar si el sistema es capaz de admitir la estimación de la luz extendiendo XrSystemProperties con la estructura XrSystemLightEstimationPropertiesANDROID cuando se llama a xrGetSystemProperties.
Si el sistema no es compatible con la estimación de luz, mostrará XR_FALSE
para supportsLightEstimation
y XR_ERROR_FEATURE_UNSUPPORTED
de xrCreateLightEstimatorANDROID.
Uso válido (implícito)
- La extensión XR_ANDROID_light_estimation debe estar habilitada antes de usar XrSystemLightEstimationPropertiesANDROID.
type
debe serXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.
Crea un identificador de estimador ligero
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
El control XrLightEstimatorANDROID representa un estimador de luz. Este control se puede usar para acceder a la información de estimación de la luz con otras funciones de esta extensión.
La función xrCreateLightEstimatorANDROID se define de la siguiente manera:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Descripciones de los parámetros
session
es la XrSession que crea el estimador de luz.createInfo
es un puntero a una estructura XrLightEstimatorCreateInfoANDROID que contiene parámetros que se usarán para crear el estimador de luz.outHandle
es un puntero a un controlador en el que se muestra el XrLightEstimatorANDROID creado.
La aplicación puede usar la función xrCreateLightEstimatorANDROID para crear un estimador de luz.
- xrCreateLightEstimatorANDROID mostrará
XR_ERROR_FEATURE_UNSUPPORTED
si el sistema no admite la estimación de luz. - xrCreateLightEstimatorANDROID mostrará
XR_ERROR_PERMISSION_INSUFFICIENT
si no se otorgaron los permisos necesarios a la aplicación que realiza la llamada.
El identificador del estimador de luz que se muestra puede usarse posteriormente en llamadas a la API. Si una aplicación quiere indicarle al entorno de ejecución que ya terminó de acceder a los datos de estimación de luz, debe destruir el controlador con xrDestroyLightEstimatorANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de llamar a xrCreateLightEstimatorANDROID. session
debe ser un identificador XrSession válido.createInfo
debe ser un puntero a una estructura XrLightEstimatorCreateInfoANDROID.outHandle
debe ser un puntero a un controlador XrLightEstimatorANDROID.
Códigos de retorno
XR_SUCCESS
XR_SESSION_LOSS_PENDING
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
La estructura XrLightEstimatorCreateInfoANDROID describe la información para crear un control XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrLightEstimatorCreateInfoANDROID. type
debe serXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.
La función xrDestroyLightEstimatorANDROID libera el estimator
y cualquier recurso subyacente.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descripciones de los parámetros
estimator
es un XrLightEstimatorANDROID que xrCreateLightEstimatorANDROID creó anteriormente.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de llamar a xrDestroyLightEstimatorANDROID. estimator
debe ser un controlador XrLightEstimatorANDROID válido.
Seguridad de subprocesos
- El acceso a
estimator
y a cualquier controlador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Accede a los datos de estimación de la luz
La función xrGetLightEstimateANDROID se define de la siguiente manera:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Descripciones de los parámetros
estimator
: Es un identificador de un XrLightEstimatorANDROID que se creó conxrCreateLightEstimatorANDROID
.input
: Puntero a una estructura XrLightEstimateGetInfoANDROID.output
: Puntero a una estructura XrLightEstimateANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de llamar a xrGetLightEstimateANDROID. estimator
debe ser un control XrLightEstimatorANDROID válido.input
debe ser un puntero a una estructura XrLightEstimateGetInfoANDROID válida.output
debe ser un puntero a una estructura XrLightEstimateANDROID.
Códigos de retorno
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_TIME_INVALID
Un XrLightEstimateGetInfoANDROID describe la información necesaria para obtener datos de estimación de la luz.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras.space
es el XrSpace que define el espacio de referencia en el que se expresan la dirección de la luz que se muestra y los armónicos esféricos.time
es elXrTime
que describe el momento en el que la aplicación desea consultar la estimación de luz.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrLightEstimateGetInfoANDROID. type
debe serXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.space
debe ser un identificador de XrSpace válido.
La estructura XrLightEstimateANDROID contiene datos de estimación de luz.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID.state
es el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.lastUpdatedTime
es elXrTime
que representa cuándo se calculó la estimación por última vez.
Para obtener información de la estimación de luz para la luz ambiental, los armónicos esféricos y la luz direccional principal, las aplicaciones pueden encadenar instancias de las siguientes estructuras, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID, respectivamente, en XrLightEstimateANDROID::next.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrLightEstimateANDROID. type
debe serXR_TYPE_LIGHT_ESTIMATE_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras. Consulta también: XrAmbientLightANDROID, XrDirectionalLightANDROID y XrSphericalHarmonicsANDROID.state
debe ser un valor válido de XrLightEstimateStateANDROID.
La estructura XrAmbientLightANDROID contiene datos de estimación de luz sobre la luz ambiental de la escena.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID.state
es el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensity
es unXrVector3
que representa la intensidad de la luz ambiental. Cada componente del vector corresponde a los canales rojo, verde y azul.colorCorrection
es unXrVector3
con valores en el espacio gamma. Multiplica el color de la renderización corregida por gamma con estos valores por componente.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrAmbientLightANDROID. type
debe serXR_TYPE_AMBIENT_LIGHT_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.state
debe ser un valor válido de XrLightEstimateStateANDROID.
La estructura XrSphericalHarmonicsANDROID contiene armónicos esféricos que representan la iluminación de la escena.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID y XrDirectionalLightANDROID.state
es el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.kind
es el XrSphericalHarmonicsKindANDROID que solicita la aplicación.coefficients
es un arrayfloat
bidimensional con dimensiones de 9 filas y 3 columnas. Las 3 columnas correspondientes a los canales de color rojo, verde y azul, respectivamente. Cada canal tiene 9 coeficientes armónicos esféricos.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrSphericalHarmonicsANDROID. type
debe serXR_TYPE_SPHERICAL_HARMONICS_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.state
debe ser un valor válido de XrLightEstimateStateANDROID.kind
debe ser un valor válido de XrSphericalHarmonicsKindANDROID.
La estructura XrDirectionalLightANDROID contiene datos de estimación de luz.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID.state
es el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensity
es unXrVector3
que representa la intensidad de la luz directa. Cada componente del vector corresponde a los canales rojo, verde y azul.direction
es unXrVector3
que representa la dirección de la luz.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimation
debe estar habilitada antes de usar XrDirectionalLightANDROID. type
debe serXR_TYPE_DIRECTIONAL_LIGHT_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.state
debe ser un valor válido de XrLightEstimateStateANDROID.
La enumeración XrSphericalHarmonicsKindANDROID identifica al entorno de ejecución qué tipo de armónicos esféricos solicita la aplicación.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Las enumeraciones tienen los siguientes significados:
Enum |
Descripción |
|
Los coeficientes de armónicos esféricos representan la función de brillo de la luz ambiental, sin incluir la contribución de la luz principal. |
|
Los coeficientes de armónicos esféricos representan la función de brillo de la luz ambiental, incluida la contribución de la luz principal. |
La enumeración XrLightEstimateStateANDROID identifica al entorno de ejecución el tipo de armónicos esféricos que solicita la aplicación.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Las enumeraciones tienen los siguientes significados:
Enum |
Descripción |
|
La estimación de la luz es válida |
|
La estimación de luz no es válida. |
Código de ejemplo para la estimación de la luz
En el siguiente código de ejemplo, se muestra cómo obtener todas las cantidades posibles de estimación de luz del entorno de ejecución.
XrSession session; // Created at app startup
XrSpace appSpace; // 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 totalSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID,
.next = &directionalLight,
};
XrSphericalHarmonicsANDROID ambientSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID,
.next = &totalSh,
};
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &ambientSh,
};
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));
Nuevos tipos de objetos
XrLightEstimator
La enumeración XrObjectType se extiende con lo siguiente:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
La enumeración XrStructureType se extiende con lo siguiente:
XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_ANDROID
XR_TYPE_DIRECTIONAL_LIGHT_ANDROID
XR_TYPE_SPHERICAL_HARMONICS_ANDROID
XR_TYPE_AMBIENT_LIGHT_ANDROID
Enumeraciones nuevas
Nuevas estructuras
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
Funciones nuevas
Problemas
Historial de versiones
- Revisión 1, 16/9/2024 (Cairn Overturf)
- Descripción inicial de la extensión