VRML - Optimizacion de modelos 3D en VRML

 
Vista:

Optimizacion de modelos 3D en VRML

Publicado por Toni (1 intervención) el 11/02/2009 18:53:34
Hola a tod@s, necesito ayuda con un modelo 3D en VRML que estoy haciendo (si, todavia no me he pasado al x3D).
Quiero optimizarlo dado el gran volumen de poligonos texturizados que contiene. Se trata de un edificio y su entorno.
Tengo modelizado el interior y el exterior en ficheros .wrl distintos. Estos a su vez "llaman" a otros ficheros .wrl que contienen los objetos modelizados, a traves del nodo inline. Lo que quiero es que cuando el observador se encuentre fuera del edificio no se cargue el interior, para hacer la navegacion mas rapida.
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 concentricas, 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 poligonos que rodean la geometria a la que se aplica el sensor, de manera
que cada vez que el observador mira en direccion 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 tendria 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 codigo VRML que llama al modelo interior, no sea leido, o no se ejecute hasta que el observador este dentro del edificio.
Este es el codigo que llama al interior

DEF interior Transform {
children [
DEF interior Inline {
url [ "interior.wrl" ]
} ,
]
}
Mi idea era conseguir que este codigo no se leyera-cargara hasta que el evento isActive de un sensor de proximidad lo activara, pero no lo he logrado.
Por otra parte encontre esto en este enlace: http://docs.rinet.ru/MultiG/ch18.htm que podria 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 {
heigth 1
bottomRadius 0.5
}
}
DEF car_touch TouchSensor {}
]
}

DEF add_car Script {
field SFBool pointer_over FALSE
field SFBool done FALSE
field MFString car_url "p51.wrl"
field SFNode car_pos USE car_position
eventIn SFBool isClicked
eventIn SFBool 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_pos == 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 TO add_car.isOver

*************************************************
Este codigo 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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Optimizacion de modelos 3D en VRML

Publicado por nramire1 (36 intervenciones) el 19/06/2009 23:51:48
en este parrafo que tu mismo escribiste tienes la respuesta

"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. "

Necesitas un definir un ProximitySensor y su entorno. con eso deberias resolverlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar