Professional Documents
Culture Documents
Particionado especial
Contenido CAPÍTULO 21
2
Una de las razones principales navegadores VRML parecen ser tan lento,
especialmente para las escenas de interior, como la construcción de interiores,
3
es que deben hacer (en otras palabras, dibujar) todo en el mundo entero. Si el
usuario está en una pequeña habitación junto a una gran sala de conciertos, el
navegador debe sacar cada silla, cada pliegue de la cortina, todas las puertas y
el hueco de la escalera y barandilla en la sala de conciertos, aunque el usuario
no puede ver cualquiera de esos objetos. Esto debe hacerse para cada marco
el ordenador hace que, por lo que el número de fotogramas por segundo que
pueden ser generados es muy pequeño. Bajos índices de marco no sólo que el
mundo sea menos divertido de explorar, también pueden hacer casi imposible
para navegar por el medio ambiente.
El uso de LOD (Nivel de detalle) nodos puede ayudar un poco, pero funcionan
estrictamente en función de la distancia y por lo tanto son de uso limitado en
este tipo de situación. Más importante aún, son de poca utilidad en las escenas
de interior donde hay un alto nivel de complejidad de profundidad.
Idealmente, nunca quieren sacar todo lo que el usuario no puede ver. Podemos
acercarnos a este objetivo mediante el uso de una técnica conocida como
partición espacial.
los capítulos 18 y 19. Si el usuario no puede ver la sala del taller, entonces no
sólo no tenemos para hacerlo, también no tiene que enviar las actualizaciones
de cualquiera de las entidades en el salón.
segmentos, así como un piso. Nos aseguramos de que estos objetos son una
sola cara mediante el establecimiento de la bandera a TRUE sólidos en sus
IndexedFaceSet representación. Esto nos permite mirar en las habitaciones
desde el exterior, por ejemplo, la Figura 21.2 se muestra la sala de estar.
Figura 21-3 muestra una vista aérea de la planta principal de toda la casa.
Tenga en cuenta que no hay techo y las paredes exteriores son visibles sólo
desde el interior.
Vamos a estar usando esta estructura básica de nuestra caja y la BSP ejemplos.
Cajas de la envolvente
Cajas se prestan bien a los espacios interiores, tales como la planta que miró
antes, ya que la mayoría de las habitaciones son en forma de caja (cuatro
paredes y el suelo y el techo).
DEF SW Switch (
whichChoice -1
Grupo de elección (
bboxCenter ES bboxCenter
bboxSize ES bboxSize
los niños son los niños
)
)
ProximitySensor (
centro bboxCenter
El tamaño es bboxSize
isActive se canSee
)
Guión (DEF SC
url "Region.class"
eventIn SFBool countThese ES seenBy
eventOut SFInt32 showChildren
8
) # Fin de PROTO
Vamos a echar otro vistazo a nuestra planta ejemplo. Vamos a tratar cada una
de las habitaciones como una región, por lo que nos rodean la Región
Transformar nodos con nodos y añadir rutas a especificar de región a región
visibilidad:
DirectionalLight (dirección 1 -1 1)
DirectionalLight (dirección -1 -1 -1)
Tenga en cuenta que cada región tiene su canSee eventOut dirigida a su propia
seenBy eventIn. Esto se debe a que un usuario de pie en una región casi
siempre podremos ver el contenido de esa Región. Podríamos haber duro esta
en nuestro código de Java script bastante fácilmente, pero este enfoque nos da
más flexibilidad, ya que el mundo autor puede decidir hacer la actual Región
ocultos sin modificar la clase Java.
Limitaciones de la envolvente Recuadros
También hay veces cuando se quiere una habitación en una subdivisión de las
regiones más pequeñas. Por ejemplo, en la Figura 21.1, la cocina y la alcoba
son visibles sólo a determinadas partes del taller y zona de almacenamiento, y
el cuarto de baño es visible sólo a determinadas partes de la cocina. Nos podría
13
Binary Space Partitioning (BSP), los árboles son generalmente superiores a las
cajas de la envolvente. Nos dan una tremenda flexibilidad espacial en nuestra
separación y que es computacionalmente más eficiente que limitan cajas. Son
más complejos de un punto de vista de autor, pero es posible crear
herramientas que construir automáticamente BSP árboles a partir de un
conjunto de datos de entrada.
Árboles BSP cómo el trabajo
BSP árboles son relativamente simples, pero son a veces difíciles de visualizar.
La idea básica es tomar el volumen de espacio tridimensional y la partición en
dos piezas mediante un plano matemático. El binario de parte de la Oficina de
Planificación Estratégica nombre viene del hecho de que el resultado de dos
piezas de cada partición.
Ax + by + Cz + D = 0
Un avión va a dividir el mundo entero en dos partes. Una o ambas de las partes
se puede dividir por otros aviones, lo que resulta en nuevas particiones. Cada
una de las partes puede subdividirse, y así sucesivamente. Cada partición
convexa produce dos nuevos volúmenes de espacio.
Por ejemplo, echemos otro vistazo a nuestra planta. Vamos a añadir la partición
de los aviones que en las regiones, y vamos a asignar un número a cada uno
de esos aviones, como se muestra en la Figura 21.5.
Hemos mantenido las cosas simples por aquí particionado en sólo dos
dimensiones en lugar de tres. También hemos mantenido todos nuestros
aviones alineados con los ejes del mundo. Eso es de ninguna manera una
obligación, el avión puede convertirse en cualquier ángulo.
Sin embargo, hay un trade-off en juego. Dado que estamos construyendo estas
particiones a mano, hemos optado por mantener el árbol fácilmente extensible.
Podemos añadir las casas de los vecinos por los cuatro lados, sin tener que
modificar la mayor parte de la estructura de árbol que hemos construido, ya
que cada vecino corresponde a un nodo hoja. Si nos dividido el interior de la
casa primero, luego cada vecino mucho que se han dividido por uno de los
primeros aviones, y nos se vean obligados a vivir con ello dividir más adelante.
Por supuesto, podríamos haber convertido toda la casa existente en una hoja
en un árbol más grande, a fin de evitar el problema.
¿Cómo se utilizan los árboles BSP
Con el fin de utilizar los árboles BSP en VRML, necesitamos tener alguna
manera de controlar la visibilidad de cada nodo hoja por separado. Vamos a
hacer esto por envolver cada uno de los nodos de transformación de nuestro
mundo interior original de un nodo Switch. El Switch nodos tendrán su campo
16
Vamos a tener nuestra planta mundo, incluido el árbol BSP hemos construido
para que antes, y expresarlo en VRML. El resultado se parece a esto:
Guión (DEF SC
url "BSPTree.class"
MFString bspNodes campo [
"0 0 1 -7 1 -10"
"1 0 0 -9 2 -13"
"1 0 0 12 -12 3"
"0 0 1 7 -11 4"
"1 0 0 4 5 7"
"0 0 1 0 6 -2"
"1 0 0 8 -3 -4"
"0 0 1 3 8 9"
"1 0 0 0 -5 -6"
18
"0 0 1 -3 10 -9"
"1 0 0 -4 -1 11"
"0 0 1 0 -7 -8"
]
MFString bspLeaves campo [
"5 6 7 8",
"3 8",
"3 4"
"1 2 4 5"
"0 2 3 5 6"
"0 3 4 6 7 8"
"0 4 5"
"0 5"
"0 1 5"
]
eventIn SFVec3f ubicación
campo MFNode niños [
R0 USO USO R1 USO R2 USO R3 USO R4 USO R5 USO R6 USO R7 USO R8
]
)
Las hojas son aún más simple: cada hoja tiene una lista de los índices en
bspLeaves de los nodos hoja (es decir, las regiones) que son visibles desde la
19
hoja.
0x 0Y 1z -7 = 0
Los valores de 1 y -10 al final de este primer nodo nonleaf significa que la
izquierda comienza con subtree nodo bspNodes [1], y el derecho subtree es un
nodo hoja bspLeaves encontrar en [9].
paquete espacial;
Que la inicialización de todos los que tenemos que hacer. Todo lo demás que
ocurre como resultado de la ubicación del usuario cambiando:
21
Suponiendo que el usuario ha entrado en una nueva hoja, que ocultar todas las
regiones que antes eran visibles por la fijación de sus valores whichChoice a -1.
Hacemos la región que el usuario es visible en whichChoice por su valor a 0.
22
Por último, el paso a través de la lista de las hojas visibles desde la hoja y
hacer visible cada uno de ellos mediante el establecimiento de whichChoice su
valor a 0. Estamos poniendo al día la final oldleaf valor.
El descenso comienza con el primer nodo (nodo = 0). Mientras el nodo índice
es no negativa, estamos atravesando nonleaf nodos. Esperamos hasta el nodo
en cuestión en el bspNodes [] array, comprobar para ver qué lado del plano
correspondiente se encuentra en la ubicación mediante el uso de la frente () el
método de nodo, y seleccione el subárbol izquierda o derecha, según
corresponda.
paquete espacial;
paquete espacial;
Por el momento, que apague todos los interruptores cada vez que el usuario
entra en una nueva región y, a continuación, a su vez algunos de ellos de
nuevo. Podría ser más eficaz para comparar la visibilidad de las listas de las
24
Dos estudiantes del MIT, Pat McCormick y Anthony Accardi, han completado
una impresionante pieza de trabajo denominado bsp2wrl. Básicamente se trata
de un convertidor que toma la Oficina de Planificación Estratégica de archivos
utilizado por Quake y los convierte en VRML, que codifica la información en la
Oficina de Planificación Estratégica árbol un archivo binario que se lee y
procesa en tiempo de ejecución de un script de Java con técnicas similares a
las presentadas en este capítulo.