Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Camaras tercera persona

Iniciado por Jviruss, 14 de Marzo de 2007, 10:51:20 AM

« anterior - próximo »

Jviruss

Buenas estoy utilizando ogre para montar una pekeña demo .Esta demo trabaja con una camara en 3º persona.Bueno mi problema es el siguiente.Cuando un objeto se interpone entre la camara y el player,no se ve nada komo de konstumbre.Para descubrir si algo se interpone entre el player y la camara lo ke hago es lanzar un rayo del centro del player al centro de la camara(o viceversa).Una vez detectado esto tengo dos opciones que se me han ocurrido:

1ºAplicarle un alpha al mesh ke se interpone y poder ver asi al player.
2ºAcercar la camara al player hasta ke no haya colision intermedia.

Bueno la segunda opcion la he programado sin problemas pero si la camara se pega demasiado es el propio player kien te tapa y no te deja ver.

Para la segunda opcion no tengo ni idea de komo aplikarle un alpha a un scene Node en Ogre.Alguien sabe????

Espero que podais contestarme mas alternativas.Gracias!!!

Jove Chiere

Y porque no haces como algunos juegos que cuando la cámara ya esta tan cerca del personaje que es molesto jugar así, pasa una cámara en primera persona (osea poner la cámara delante del protagonista a la altura de los ojos).

Lo de meterle opacidad a todo el modelo (por malla supongo) pues eso ya no se porque soy grafista y no programador. Pero en los modelos existe un parámetro para eso en los materiales, quizás eso te de una pista.
Los grafosyakuza recomiendan Wings3D - Entra en GIMOVJ  y aprende a modelar.

Mars Attacks

También puedes dejar la cámara quieta en el momento en el que colisione, y luego interpolar con la posición que tendría que tener realmente cuando deje de colisionar.

er_willy

Ni puta de como se cambia el alpha pero usa la segunda opcion. cuantos menos cambios de posicion mejor para la sensacion de fluidez.

Tanto la primera opcion, como la de mars son buenas ideas para paredes y objetos de escenario.

en mi opinion claro




offtopic: que tal mars que ya nunca nos hablamos. un saludete

Jviruss

Mars puedes explikarte un poko mejor?,no te entendi.Gracias!!!

Hans

Aplicar un alpha a todo un SceneNode es algo que no he probado nunca pero supongo que bastaría con recorrer todos los elementos "attacheados" al SceneNode (numAttachedObjects) con getAttachedObject preguntar el tipo de objeto que es con getMovableType y en caso de que sea una Entity modificar su material ;)

Espero que te sirva, ya nos contarás :D

er_willy

Cuantos juegos de tercera persona has evaluado y cojido apuntes antes de ponerte a progarmar tu camara?

Jviruss

No he tomado apuntes,sino que he intentado akordarme de los juegos en los ke algun tiempo e jugado.Llevo jugando desde el msx2 ke aunke no habia juegos 3d(a no ser ke fueran de naves con 3d falsas)puedes tomar apuntes de otros estilos de camaras,como podria ser el Rambo(vista Aerea)o el vampire Killer(vista lateral).La idea no es tomar demasiados apuntes,sino llegar a un punto klave,ke es komo novato ke puedo conseguir.Lo mas facil es tirar un rayo de la camara al personaje,si hay algo en medio acerco la camara hasta ke no haya nada,tiro otro rayo desde la camara hasta el punto dnde estaria la camara si nada se interponiera.Si hay algo llevo la camara hasta este limite,si no hay nada vuelvo la camara a su distancia habitual.El problema okurre kuando la kamara esta demasiado cerca del player.Entonces,solucion dada aki,hago invisible al player.El problema okurre imaginate en un juego kon kamara tipo Vampire Killer pero en 3d.Imaginate un mundo 3d,yo siempre miro al jugador alejado una cierta distancia,siemrpe en el eje z.Nada de rotar la camara con el player,sino ke el player puede rotar y la camara observa como este rota.Entonces,a cuento de antes,que me he perdido un poko,si hago invisible al player con este tipo de camara en el ke la orientacion la marca el player y la camara tiene otra orientacion diferente y estatica,entonces no se a dnde voy por ke no veo al jugador y no se hacia en que direccion caminare(Imaginate la Abadia del crimen).Me e explikado komo el kulo como dice alguien ultimamente.jiji.Bueno pues por eso a pesar de intentar hacer una camara simple e pedido ayuda en este foro.Si supiera hacer transparentes algunos meshes no tendria ni ke mover la camara y seria la segunda opcion mas facil aunke menos atractiva por la falta de movimiento.Y si konsigo hacer estas dos ultimas ya haria una combinacion bastante mas xula.Que seria aproximar la camara hasta cierta distancia limite y a partir de esta aplikar alphas a las cosas ke me estorben.Despues podria aplicar la kombinacion de ke la camara no rotara kon el player hasta ke este decidiera andar por fin hacia delante o hacia atras(tipo Tomb Raider).Y asi hasta llegar a numerosas camaras infinitas con muchos apuntes tomados.Pero de nuevo digo ke no kiero hacer una camara perfecta desde el principio,sino partir de una base para ir mejorandola.

Por cierto felicidades por tus juegos,tienen todos buena pinta.Como evitaste por ejemplo ke si algo se interponia entre el toro y tu camara se viera el toro?QUe tecnika usaste?
Xiao!!!!

Mars Attacks

Er_willy, no hablamos pero yo sigo flipando contigo (y con tu vieja :D), todo va mal y de puto culo, como de costumbre. El día que no sea así, empezaré a preocuparme.

jviruss, supón que en el instante X, entre tu cámara y tu jugador no se interpone nada, pero en el instante X+1, sí. Tú usas la posición de la cámara del instante X (y sigues calculando la que tendría en el X+2, X+3, etc) hasta el momento en el que la cámara ya dejara de colisionar (pongamos el X+n). Entonces haces pasas a la posición de cámara que tendrías en el X+n pero, para que no dé un salto súbito y quede "feo", lo suyo es que movieras la cámara con suavidad hasta esa posición, interpolando las posiciones entre X y X+n.

El problema ahí es que igual terminas atravesando cosas con la cámara, pero bueno, te aseguras de ver en todo momento al jugador.

er_willy

El toro lanza tres rayos uno de la cabeza en vertical arriba que controla la altura(por si pasa por portones bajos).

Otro de 45 grados de inclinacion que acerca la camara, por si se interpone algo en medio o estas muy cerca de la pared, aunque a los humanos los ignora para evitar excesivo movimientos de la camara, si tuviese que elegir haria la opcion del alpha.

Y otro rayo en horizontal del centro del modelo hacia atras a media altura para acercar la camara en el caso de que los muros bajos en los que el rayo de 45 no llega a pasar


He mars, mientras no pierdas el sentido del humor. : )

TrOnTxU

Bueno, la verdad es que estoy perdido ya, pero en cuanto a la semi-transparencia Hans tiene razón.

La semitransparencia se puede activar en un material scripteando esto dentro del mismo:
scene_blend addTe propongo que pruebes a copiar y modificar tu material (cambiandole el nombre por supuestisisisimo) y luego cambies el material de tu entidad (yo intentaria controlar que nodos pueden entrar en conflicto y asegurarme de tratarlos como entidades).
Para cambiar el material de tu entidad solo haz entity->setMaterialName("mimaterial");¿Esa era la pregunta no?

Conseguir que un cámara en 3rd person no entre dentro de la geometria de tu escenario y muestre lo que no debe, o se interpongan objetos no deseados a veces resulta extremadamente complicado, y quizás un par de restricciones en tu nivel ayudarian a buscar una fácil solución. Aun así, yo creo que la mejor opción (o quizás a la que más acostumbrado estoy a ver) es realizar una interpolación desde la posición "natural de la cámara" hasta (como bien ha dicho Jove) los "ojos" del personaje, o sea pasar de 3rd a 1st person, donde el "factor" de acercamiento viene dado por las restricciones de colisión. No sé si me explico, pero la forma de hacerlo viene dada, en gran parte, por la implementación que hayas hecho del comportamiento de tu cámara: las coordenadas (globales, locales, etc), el tipo de representación utilizada (euler, quaternions, matrix, dist., etc), el algoritmo, etc.

Yo cambiaria de material (al transparente) el player (entidad seguro) en el mismo momento en que notes que tienes que comenzar a acercar la cámara tu personaje, y obtendria la pos de la cámara como el punto de colisión con la geometria de tu escenario, que se obtinene al lanzar un rayo desde tu jugador hasta la posición que debiera tener la cámara. Puedes adaptar la posición, con algunas restricciones sobre esta "regla básica", es cuestión de probar nuevas ideas, y mantener el código ordenado para no acabar echo un lio. De todas formas creo que es la idea (más o menos) que viene expresando alguna gente en este tema.

Bueno, espero ser de ayuda.
Un saludo.

PS: por cierto Hans, si tienes un ratito este finde, echale un ojo al mail, y me cuentas.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.