Optimización de modelos 3d en vrml

Hola a todos/as, necesito ayuda con un modelo 3d en vrml que estoy haciendo (si, todavía no me he pasado al X3D). Quiero optimizarlo dado el gran volumen de polígonos texturizados que contiene. Se trata de un edificio y su entorno.

Tengo modelado el interior y el exterior en ficheros.wrl distintos. Estos a su vez llaman a otros ficheros.wrl que.

Que contienen los objetos modelado, a través del nodo inline. Lo que quiero es que cuando el observador se encuentre fuera del edificio no se cargue.

El interior, para hacer la navegación más rápida.

He probado el nodo Lod (level of detail) pero este se basa en intervalos de distancia respecto de un punto.

Y por lo tanto, localiza al observador por medio de esferas concéntricas, con lo que tengo que rodear el interior del edificio con una esfera.

Para que, mientras no me encuentre dentro de esa esfera, no se cargue el modelo del interior. Esto significa que si me acerco por fuera a una de.

Las fachadas del edificio, el interior se cargara sin que este el observador dentro, y la escena se ralentiza.

Lo que necesito entonces es algo como que un sensor proximitysensor detecte la presencia del observador dentro del edificio y cargue entonces.

El modelo del interior.

El sensor de visibilidad visibilitysensor no me sirve ya que no detecta los polígonos que rodean la geometría a la que se aplica el sensor, de manera.

Que cada vez que el observador mira en dirección al edificio, se carga el interior, aunque estemos fuera.

En el fichero principal, el que llama al modelo interior y al modelo exterior, es donde tendría que estar el script, o el sensor, que permitiera cargar.

El interior solo cuando estamos dentro del edificio. El problema es encontrar la forma de que el código vrml que llama al modelo interior, no sea leído, o no se ejecute.

Hasta que el observador este dentro del edificio.

Este es el código que llama al interior.

Def interior transform { tchildren [ tdef interior inline { url [ interior.wrl ] t} t].
}.

Mi idea era conseguir que este código no se leyera-cargara hasta que el evento isactive de un sensor de proximidad lo activara, pero.

No lo he logrado.

Por otra parte, encontré esto, que podría adaptarse para hacer lo que necesito:
Def car_position transform {.

Translation -4 2 0.
}.

Transform {.

Translation -1.5.5 4.5.

Children [.

Shape {.

Appearance appearance {.

Material material { emissivecolor 0 0.6 }.
}.

Geometry cylinder {.

Height 1.

Bottomradius 0.5.
}.
}.

Def car_touch touchsensor {}.
}.

Def add_car script {.

Field sfbol pointer_over false.

Field sfbol done false.

Field mfstring car_url p51.wrl.

Field sfnode car_pues use car_position.

Eventin sfbol isclicked.

Eventin sfbol isover.

Url javascript:
Function isclicked(button_pos) {.
// the following two if statements should be combined.
// together with && but Cosmoplayer did not like it -bug.

If(button_pues == 0).
{.

If((pointer_over == 1) && (done == 0)).
{.

Browser, createvrmlfromurl(car_url.

Car_pos, add_children).

Done = 1.
}.
}.
}.

Function isover(value) {.

If(value == 0).

Pointer_over = 0.

Else.

Pointer_over = 1.
}.
}.
# the car addition routes.

Route car_touch, isactive to add_car, isclicked.

Route car_touch, isover todo add_car, isover.
************************************************** ****.

Este código carga un coche a partir de un touch sensor. Pero no me funciona. Primero me dice que add_children is not a field of script.

Si le quito las comillas a add_children, se abre el.wrl, pero al pinchar en el cilindro me dice add_children is not defined.

No entiendo nada. Alguien puede ayudarme? Gracias de antemano.

Ver más sobre el tema y los comentarios en el foro