Red de conocimiento informático - Computadora portátil - Ensayo sobre cesio: Dibujar un cono (Parte 1)

Ensayo sobre cesio: Dibujar un cono (Parte 1)

El primer diario técnico de CesiumJS, no importa cuán difícil sea la tecnología, es un buen hábito resumirlo cuidadosamente. Este documento es muy complicado. Si desea dibujar la vista frustum directamente, muévase aquí.

Recientemente estoy estudiando análisis del campo de visión. La idea es utilizar la función de dibujo de sombras abierta de la interfaz ShadowMap.js para especificar los parámetros relevantes de la fuente de luz puntual. Sin embargo, durante la depuración, no es tan sencillo. Al generar un objeto ShadowMap, se generará una excepción de que el objeto de contexto no se puede encontrar en el parámetro. No se menciona este objeto de contexto en la documentación de la API. Este problema se trata en /Analytic Graphics Inc/cesium/Issues/4010. Cozzi dijo que no lo apoyaba, por lo que simplemente dejó de lado el análisis de la vista y dibujó primero el cono de observación. Aquí solo hablo de los puntos clave, no del proceso de carga primitiva y eventos del mouse.

Opción 1: Determinar la posición de la cámara ->; Determinar la dirección de la cámara - gt; -> Generar una nueva entidad de cámara; Usar lookAt (objetivo, desplazamiento) para establecer la posición y actitud de la cámara ->; el tubo de la cámara -> Dibujar el cono de vista debería ser un método estándar, pero al depurar, el cono de vista siempre se dibuja en el centro de la tierra y muchos intentos han fallado (como en la siguiente caricatura):

No te metas en problemas, prueba el Plan de prueba 2:

Opción 2: Determinar la posición de la cámara ->; Determinar la dirección de la cámara - gt; Generar la geometría del cono de observación ->; ángulo del cono de visualización ->; Calcular el ángulo de rumbo del cono de visualización -> ;Dibujar una vista frustum. En comparación con la primera, la dificultad de la Solución 2 radica en el cálculo de la postura de la cámara. Resulta que MyAmera. Lookat (objetivo, desplazamiento) se puede usar para calcular directamente la actitud de la vista frustum, pero este método tiene errores al dibujar y ahora solo puede calcularlo usted mismo (el autor no ha encontrado una función para calcular la actitud en función de dos agujas).

La forma y actitud inicial del cono (guiñada -> 0, cabeceo -> 0, balanceo -> 0) se muestran en la siguiente figura.

Los parámetros estructurales del cono de observación son los siguientes:

Frustum: Visualización del cuerpo del cono, que se explica detalladamente a continuación.

Origen: eje, es decir, la posición nítida,

Objetivo: determina la dirección de la cámara, que se explicará detalladamente más adelante.

VertexFormat: Este parámetro no tiene nada que ver con el dibujo frustum, solo mantiene el valor predeterminado.

Elegimos PerspectiveFrustum, los siguientes son los parámetros del constructor del documento oficial.

El efecto de los parámetros "cerca" y "lejos" es el siguiente, donde la línea discontinua es una línea auxiliar y no pertenece a la geometría del cono de visualización dibujada.

Fov: Ángulo del campo de visión, girado alrededor del eje Z, ingresado en radianes.

AspectRatio: la relación entre los bordes verticales y los bordes horizontales, como se muestra en la figura siguiente, la relación de aspecto es n.

Cuando se determinan los cuatro parámetros de lejos, cerca, FOV y relación de aspecto, se puede determinar la forma de la vista frustum.

Después de iniciar el programa, lo primero es utilizar el ratón para seleccionar dos puntos: el punto de partida y el punto de destino, y calcular la actitud de la vista frustum a través de estos dos puntos, como se muestra en la imagen. figura a continuación. El punto de partida es el origen del cono de observación. Aquí sólo nos importan dos parámetros, a saber, guiñada/rumbo y cabeceo, no balanceo. Esperamos que los ángulos de rumbo y cabeceo calculados puedan representar la posición de apuntamiento de la cámara de la siguiente manera. Es decir, cuando el ángulo de rumbo y el ángulo de inclinación son 0, el rayo apunta al eje X. Cuando el ángulo de rumbo aumenta, el rayo gira en el sentido de las agujas del reloj alrededor del eje Z. Cuando el ángulo de inclinación aumenta, el rayo gira alrededor del eje Y.

Convierte la actitud calculada en cuatro elementos, que se utilizan como parámetros de acimut del cono de observación.

Pero la luz emitida por la cámara en el estado inicial del cono de visión (indicación de la cámara) no apunta en la dirección del eje X, sino en la dirección del eje Z. El rumbo es opuesto al. Dirección X El ángulo de rumbo del cono de visión es de -180° y el ángulo de inclinación es de -180°. El ángulo es de -90°, que es la postura inicial ideal del cono de visión.

¿Cuál se debe elegir entre el sistema de coordenadas de latitud y longitud y el sistema de coordenadas cartesiano en Cesium? El eje xyz al que hace referencia la postura mencionada anteriormente se basa en el elipsoide (el punto X está hacia el este, el punto Y está hacia el norte y Z es perpendicular al suelo), por lo que es más intuitivo seleccionar longitud y latitud, pero es limitado a cálculos de corta distancia.

Para calcular el ángulo de paso, primero calcule el valor absoluto:

Luego juzgue los valores positivos y negativos del ángulo de paso en función de los valores positivos y negativos de H (positivo significa tono, negativo significa tono).

Para calcular el ángulo de rumbo, primero calcule el valor del primer cuadrante:

Ahora determine la posición del punto de destino y calcule el arco de rumbo final basándose en la actitud inicial de el cono.

Área del caso 1:

Área del caso 2:

Área del caso 3: No se requiere operación

Área del caso 4:

Por supuesto, este método sólo es adecuado para distancias cortas y áreas cercanas al ecuador, lo cual es suficiente para el uso del autor.

De hecho, no se recomienda utilizar este método para calcular el frustum visual (pero al menos lo probé y lo registré después de depurarlo durante mucho tiempo. El método recomendado se discutirá más adelante).